2015-01-12 18 views
5

Ich habe ein Problem mit Popen.communicate().Popen.communicate() gibt zurück (None, None), selbst wenn Skriptdruck Ergebnisse

Ich habe Skript, die Zeichenfolge zurückgeben.

Dann habe ich ein zweites Skript geschrieben, das diese Variable nimmt.

v = "./myscript arg1 arg2" 
com = subprocess.Popen(v, shell=True).communicate() 
print com 

com kehrt zurück (None, None). Der Punkt ist, dass ich innerhalb des ersten Skripts die Ergebnisse, Shell-Print-Ergebnis als auch drucken kann. Ich kann diesen Ausdruck nicht einfach einer Variablen zuweisen.

Natürlich gibt das erste Skript den Wert zurück, nicht drucken.

+2

Wenn Sie die Standardausgabe verwenden, um die Ergebnisse von 'myscript' zurück zu Ihrem Python-Skript zu übertragen, brauchen Sie nicht' myscript', um etwas tatsächlich in STDOUT zu drucken? – rchang

+0

Das war die Lösung. –

Antwort

5

Vom docs:

Beachten Sie, wenn Sie auf die stdin der Prozessdaten senden möchten, können Sie das Popen Objekt mit stdin=PIPE erstellen müssen. In ähnlicher Weise müssen Sie auch stdout=PIPE und/oder stderr=PIPE angeben, um etwas anderes als None im Ergebnistupel zu erhalten. Daher

, erstellen Sie das Objekt Popen mit:

subprocess.Popen('lsr', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
+0

Danke! Das ist ein Schritt vorwärts, aber jetzt bekomme ich leere Zeichenfolge -.- –

+0

Faule Antwort gibt nicht an, wo 'stdout = PIPE' oder' stderr = PIPE' hinzugefügt werden soll. – N8TRO

0

Ok, rchang die Lösung zu finden. Vielleicht wird es für Newbie Scripters wie mich hilfreich sein.

Das Hauptskript hat das Ergebnis nicht gedruckt, aber zurückgegeben. Ich dachte, dass es genau umgekehrt sein sollte.

Danke!

Verwandte Themen