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