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!
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)
.
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 .
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.
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.