Python: sous-processus et exécution d'un script bash avec plusieurs arguments
Comment faire pour lancer un script bash en utilisant le module subprocess, auquel je dois donner plusieurs arguments?
voici ce que j'utilise actuellement:
subprocess.Popen(['/my/file/path/programname.sh', 'arg1 arg2 %s' % arg3],
shell = True)
le script bash semble ne prendre aucun des paramètres. Toute perspicacité est grandement appréciée!
5 réponses
passer les arguments en liste, voir le premier exemple de code dans les docs:
import subprocess
subprocess.check_call(['/my/file/path/programname.sh', 'arg1', 'arg2', arg3])
Si arg3
n'est pas une chaîne; convertissez-la 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 passés en chaîne. Des autres éléments de l' sera traitée comme des arguments vers le shell.
vous pouvez trouver les docs complets à 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 comme paramètres au script shell test.sh
essentiellement, subprocess attend un tableau. Donc vous pouvez peupler un tableau et le fournir comme 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 devrait pas y avoir d'espace entre %
et (
, par exemple % (argument1,argument2,argument3)
n'est pas valide.
Vous avez oublié d'ajouter args
nom.
subprocess.Popen(args=['./test.sh', 'arg1 arg2 %s' % arg3], shell=True)