it-swarm.com.de

Python: Subprozess und Ausführen eines Bash-Skripts mit mehreren Argumenten

Wie führe ich ein Bash-Skript mit dem Subprozess-Modul aus, zu dem ich mehrere Argumente angeben muss?

Das verwende ich momentan:

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

Das bash-Skript scheint keine der Parameter zu übernehmen. Alle Erkenntnisse werden sehr geschätzt!

23
user2510173

Argumente als Liste übergeben, siehe das allererste Codebeispiel in den Dokumenten :

import subprocess

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

Wenn arg3 keine Zeichenkette ist; konvertieren Sie es in eine Zeichenfolge, bevor Sie an check_call(): arg3 = str(arg3) übergeben.

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

Wenn Sie Shell = True verwenden, müssen das Skript und seine Argumente als Zeichenfolge übergeben werden. Alle anderen Elemente in der args-Sequenz werden als Argumente für die Shell behandelt. 

Die vollständigen Dokumente finden Sie unter http://docs.python.org/2/library/subprocess.html#subprocess.Popen .

4
user2504723

Hallo, ich weiß, dass diese Lösung ziemlich spät ist, aber jemandem helfen könnte.

beispiel:

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

subprocess.check_call(pass_arg)

Das obige Beispiel stellt dem Shell-Skript test.sh arg1 und arg2 als Parameter bereit

Im Wesentlichen erwartet der Unterprozess ein Array. Sie können also ein Array füllen und als Parameter angeben.

1
Sairaj Madhavan

Ein weiteres Beispiel, das nicht in allen oben genannten enthalten ist, 

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

Bitte beachten Sie, dass bei der Eingabe von %(argument1,argument2,argument3) zwischen % und ( kein Leerzeichen stehen darf, z. B. % (argument1,argument2,argument3) ist ungültig. 

0
Chintan Gotecha