2013-06-21 5 views

Antwort

28

Pass Argumente als Liste finden the very first code example in the docs:

import subprocess 

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

Wenn arg3 kein String; wandeln Sie es in eine Zeichenfolge um, bevor Sie an check_call() übergeben werden: arg3 = str(arg3).

+0

Wenn alle meine Argumente Variablen sind, setze ich sie nicht als Zeichenfolgen? – user2510173

+0

@ user2510173: Ich verstehe die Questi nicht auf. Hier ist ein Beispiel: 'arg3 = 1', um es zu konvertieren, könntest du' str (arg3) 'aufrufen, das '' 1'' zurückgibt. – jfs

+2

Leider beantwortet das Beispiel im Code die ursprüngliche Frage nicht, da sie einen zu einfachen Fall mit nur einem Argument gewählt haben. Es ist unklar, ob mehrere Argumente als einzelne Zeichenfolge oder als mehrere übergeben werden sollen, es sei denn, Sie lesen die Seite bis zu den Details hinter POpen gut durch. Selbst dann heißt es nur: "Im Allgemeinen wird eine Abfolge von Argumenten bevorzugt" - nicht, "Sie müssen mehrere Argumente als Liste angeben" –

0

Sie haben vergessen, args Namen hinzuzufügen.

subprocess.Popen(args=['./test.sh', 'arg1 arg2 %s' % arg3], shell=True) 
+0

also muss der Dateipfad in den Argumenten auch gesetzt werden? – user2510173

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

Wenn Sie shell = True verwenden das Skript und seine Argumente als String übergeben werden. Alle anderen Elemente in der args Sequenz werden als Argumente für die Shell behandelt.

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

1

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

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 liefert arg1 und arg2 als Parameter an die Shell-Skript test.sh

Wesentlichen Subprozess ein Array erwartet. Sie können also ein Array auffüllen und als Parameter angeben.

0

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

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 (zB% (Argument1, Argument2, Argument3) nicht zulässig sein sollte.