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!

18
demandé sur Rubens 2013-06-21 23:23:20

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

29
répondu jfs 2013-06-21 19:57:48
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.

4
répondu 2013-06-21 19:48:48

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.

1
répondu Sairaj Madhavan 2016-10-23 04:02:19

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.

0
répondu Chintan Gotecha 2018-08-30 04:20:58

Vous avez oublié d'ajouter args nom.

subprocess.Popen(args=['./test.sh', 'arg1 arg2 %s' % arg3], shell=True)
-1
répondu loentar 2013-06-21 19:33:17