Kann ich subprocess.call die Ausgabe des Aufrufs in eine Zeichenfolge schreiben?

7

Ich möchte subprocess.call machen und die Ausgabe des Aufrufs in eine Zeichenkette bringen. Kann ich das direkt tun, oder muss ich es in eine Datei pipen und dann daraus lesen?

Mit anderen Worten, kann ich stdout und stderr irgendwie in eine Zeichenkette umleiten?

    
Alex 05.05.2011, 18:30
quelle

4 Antworten

8

Nein, Sie können die Ausgabe von subprocess.call () nicht direkt in eine Zeichenfolge lesen.

Um die Ausgabe eines Befehls in eine Zeichenfolge zu lesen, müssen Sie subprocess.Popen (), z. B.:

, verwenden %Vor%

cmd_out hat die Zeichenfolge mit der Ausgabe des Befehls.

    
aeter 05.05.2011, 18:52
quelle
5

Das Modul subprocess stellt eine Methode check_output() zur Verfügung, die den bereitgestellten Befehl mit Argumenten (falls vorhanden) ausführt und seine Ausgabe als Byte-Zeichenfolge zurückgibt.

%Vor%

Der obige Code wird hello world

ausgeben

Siehe Dokumentation: Ссылка

    
Muntaser Ahmed 06.06.2014 14:14
quelle
4

Dies ist eine Erweiterung von mantazers Antwort auf python3. Sie können weiterhin den Befehl subprocess.check_output in python3:

verwenden %Vor%

aber jetzt gibt es uns eine Byte-Zeichenfolge. Um eine echte Python-Zeichenfolge zu erhalten, müssen wir decode verwenden:

%Vor%

Wenn sys.stdout.encoding als Kodierung und nicht nur als Standard UTF-8 verwendet wird, sollte dies (zumindest theoretisch) für jedes Betriebssystem funktionieren.

Der abschließende Zeilenumbruch (und alle anderen zusätzlichen Leerzeichen) können einfach mit .strip() entfernt werden. Der letzte Befehl lautet also:

%Vor%     
dshepherd 08.07.2014 17:56
quelle
2

subprocess.call() verwendet dieselben Argumente wie subprocess.Popen() , einschließlich der Argumente stdout und stderr . Details finden Sie in der Dokumentation.

    
Ignacio Vazquez-Abrams 05.05.2011 18:36
quelle

Tags und Links