web-dev-qa-db-fra.com

Python: sous-traitement et exécution d'un script bash avec plusieurs arguments

Comment puis-je exécuter un script bash à l'aide du module de sous-processus, auquel je dois donner plusieurs arguments?

C'est ce que j'utilise actuellement:

subprocess.Popen(['/my/file/path/programname.sh', 'arg1 arg2 %s' % arg3], \
    Shell = True)

Le script bash ne semble prendre aucun des paramètres. Toutes les informations sont grandement appréciées!

23
user2510173

Passer les arguments sous forme de liste, voir le tout premier exemple de code dans la documentation :

import subprocess

subprocess.check_call(['/my/file/path/programname.sh', 'arg1', 'arg2', arg3])

Si arg3 n'est pas une chaîne; convertissez-le en chaîne avant de passer à check_call(): arg3 = str(arg3).

33
jfs
subprocess.Popen(['/my/file/path/programname.sh arg1 arg2 %s' % arg3], Shell = True).

Si vous utilisez Shell = True, le script et ses arguments doivent être transmis sous forme de chaîne. Tous les autres éléments de la séquence args seront traités en tant qu'arguments du shell. 

Vous pouvez trouver la documentation complète sur http://docs.python.org/2/library/subprocess.html#subprocess.Popen .

4
user2504723

Salut, je sais que cette solution est assez tard, mais pourrait aider quelqu'un.

exemple:

import subprocess
pass_arg=[]
pass_arg[0]="/home/test.sh"
pass_arg[1]="arg1"
pass_arg[2]="arg2"

subprocess.check_call(pass_arg)

L'exemple ci-dessus fournit arg1 et arg2 en tant que paramètres du script shell test.sh.

Essentiellement, le sous-processus attend un tableau. Vous pouvez donc renseigner un tableau et le fournir en tant que paramètre.

1
Sairaj Madhavan

Un autre exemple, qui n’est pas inclus dans tous les précédents, 

subprocess.Popen(['/your/script.sh %s %s %s' %(argument1,argument2,argument3)], Shell = True)

Veuillez noter que lorsque vous tapez %(argument1,argument2,argument3), il ne doit y avoir aucun espace entre % et (, par exemple, % (argument1,argument2,argument3) n'est pas valide. 

0
Chintan Gotecha