Bei der Verwendung von subprocess.Popen () haben stderr und stdout keine Ausgabe

8

Ich verwende Python, um einen SVN-Commit zu automatisieren, und ich möchte die Ausgabe des SVN-Befehls in eine Protokolldatei schreiben. Der Code, den ich habe, kann SVN ausführen, aber das Problem ist, dass bei einem erfolgreichen Commit der subprocess Aufruf keine Ausgabe für mein Log zurückgibt.

Wenn ich SVN manuell durch Vergleich ausführe, erhalte ich eine Ausgabe, die den Fortschritt des Befehls anzeigt und anzeigt, welche Dateien festgeschrieben werden. Das will ich in meiner Log-Datei. Sendet SVN diese Daten in einen Puffer als stdout oder stderr? Wie kann ich diese Daten für mein Protokoll erfassen?

Hier ist der Code, den ich verwende:

%Vor%

Wenn ich diesen Code ausführe und das Commit erfolgreich ist, sind die Variablen out und err beide leer.

    
Jeremy Gillick 02.05.2012, 00:34
quelle

2 Antworten

9

Verwenden Sie nicht wait() , wenn Sie PIPE verwenden. Verwenden Sie communicate ()

%Vor%

Aus den Unterprozessdokumenten :

  

Warnung
  Verwenden Sie communicate () anstelle von .stdin.write, .stdout.read oder   .stderr.read, um Deadlocks aufgrund einer der anderen OS-Pipes zu vermeiden   Puffer füllen und blockieren den Kindprozess.

    
jdi 02.05.2012 00:37
quelle
0

Es funktioniert in meiner Lösung:

%Vor%     
Robert Karaś 02.10.2017 12:40
quelle

Tags und Links