2016-06-22 7 views
-1

ich ein einfaches Skript, das die Struktur ist mit:über subprocess.Popen mit Rückgabewert Running script

if __name__ =='main': 
    #do some logic 
    #print to console the result 

Nun lief ich das Skript über den Code subprocess.Popen() Methode wie folgt:

p = subprocess.Popen(
    ["python", path_of_script_to_run] + arguments_list, 
    stdout=subprocess.PIPE, 
    stderr=subprocess.PIPE) 

Meine Frage ist, wie kann ich einen Wert aus dem laufenden Skript in das aufrufende Skript mithilfe Rückgabewert oder eine andere Methode zurückgeben.

ich Rückkehr im Kontext der if __name__ =='main': nicht so bedeutet es verwenden kann ich keinen Rückgabewert zugewiesen wird in der anrufenden Skript an die p Variable übergeben kann?
Ich bin mögen auch versuchen, den Druck des Skripts zu vermeiden, um die Konsole läuft Parsen ..

+0

Ja seine Arbeits – JavaSa

+0

Liste + Liste in Python ist eine Liste – JavaSa

+0

verketteten Sie können 'exit' den Return-Code zu setzen. Angenommen zum Beispiel, dass Sie 2 zurückgeben wollen, tun Sie einfach 'exit (2)'. – tdelaney

Antwort

0

Sie können die Ausgabe in dem aufrufende Skript erfassen subprocess.check_output() mit:

from subprocess import check_output 
result = check_output(args).decode() 

Um auch Standardfehler zu erfassen Verwenden Sie im Ergebnis stderr=subprocess.STDOUT.

+0

aber wie übergebe ich den Return-Code aus dem Kontext des laufenden Skripts, versuchen, Return [etwas] zu schreiben, kann nicht arbeiten, wie Sie Syntaxfehler bekommen - 'Return' out Seite der Funktion – JavaSa

+0

@JavaSa nur 'print' es? –

+0

das ist genau das, was ich vermeiden wollte, drucken und analysieren die Drucke sind schwächer, die einen Wert – JavaSa

0

Verwenden Sie communicate(), um die Ausgabe Ihres Skripts abzurufen. Und returncode, um den Exit-Code zu erhalten.

p = subprocess.Popen(
    ["python", path_of_script_to_run] + arguments_list, 
    stdout=subprocess.PIPE, 
    stderr=subprocess.PIPE) 

(stdoutdata, stderrdata) = p.communicate() 
exit_code = p.returncode 

Für Ihre anderen Skript einen Exit-Code zurück, sollten Sie sys.exit(code) verwenden.

import sys 
if __name__ =='main': 
    try: 
     # do stuff 
     sys.exit(0) 
    except Exception as err: 
     print(err) 
     sys.exit(1) 
+0

aber wie gebe ich den Rückkehrcode aus dem Kontext des laufenden Skripts, versuchen, Return [etwas] zu schreiben, kann nicht wie Sie arbeiten syntax error- 'return' out Seite der Funktion – JavaSa

+1

Verwenden Sie ['sys.exit (code)'] (https://docs.python.org/3/library/sys.html#sys.exit) in Ihrem Skript – Cyrbil