Maison >développement back-end >Tutoriel Python >Pourquoi mes commandes Bash échouent-elles en Python sur le serveur mais fonctionnent-elles localement ?

Pourquoi mes commandes Bash échouent-elles en Python sur le serveur mais fonctionnent-elles localement ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-18 13:30:18955parcourir

Why Do My Bash Commands Fail in Python on the Server But Work Locally?

Exécution de commandes Bash en Python

Vous pouvez rencontrer des erreurs lors de l'exécution de commandes Bash dans un script Python sur un serveur, même si le même code travaille localement. Une raison courante à cela réside dans les différentes manières dont Bash est invoqué par le système d'exploitation.

Comprendre Bash

En Python, vous pouvez exécuter des commandes Bash à l'aide du module de sous-processus. Cependant, le comportement par défaut consiste à utiliser /bin/sh, qui est un shell minimal qui ne prend pas en charge toutes les fonctionnalités de Bash. Si vous avez besoin d'une syntaxe spécifique à Bash, vous devez spécifier explicitement l'exécutable Bash comme :

subprocess.run(command, shell=True, executable='/bin/bash')

Shell vs. No Shell

Vous pouvez appeler subprocess.run( ) avec shell=True ou shell=False. Avec shell=True, vous fournissez une commande de chaîne unique que le shell analyse. Avec shell=False, vous transmettez une liste d'arguments de chaîne à l'exécutable sans utiliser de shell.

L'utilisation de shell=False évite les fonctionnalités du shell mais nécessite une analyse précise de la commande en arguments. La fonction shlex.split() peut vous aider.

subprocess.run(shlex.split(command))  # shell=False

Décodage de texte

Par défaut, la sortie du sous-processus est fournie sous forme d'octets. Pour le décoder en chaîne Unicode, utilisez text=True.

subprocess.run(command, shell=True, text=True)

Dépannage

Si vous rencontrez toujours des erreurs, il est important de vérifier :

  • Assurez-vous que la commande Bash est correctement formatée et prise en charge sur le serveur.
  • Vérifiez que l'exécutable Bash (/bin/bash) existe sur le serveur.
  • Envisagez d'utiliser text=True pour vous assurer que la sortie est correctement décodée.
  • Utilisez une sortie plus détaillée (par exemple, subprocess.run (..., check=True, stderr=subprocess.PIPE)) pour aider à déboguer les erreurs.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn