Maison >développement back-end >Tutoriel Python >Pourquoi mes commandes Bash échouent-elles en Python sur le serveur mais fonctionnent-elles localement ?
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 :
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!