Vermeiden müssen Teilprozess Deadlocks ohne Kommunikation

Ich brauche einen Befehl ausführen, die eine größere Ausgabe erzeugt und nimmt eine Menge Zeit zum ausführen (> 30 Minuten). Ich war denken mit subprocess.Popen, es zu tun. Ich muss erfassen Sie die Ausgabe des Befehls, so passiere ich die PIPE auf stdout und stderr.

Einer deadlock-problem bei der Verwendung Popen.wait() ist gut dokumentiert, die auf eine Menge von Foren, so Popen.kommunizieren() ist der vorgeschlagene Weg, um die deadlock. Das problem bei dieser Lösung ist, dass die Kommunikation() blockiert, bis der Befehl abgeschlossen ist. Ich brauche, um zu drucken, alles, was ankommt, auf stdout aus, während der Befehl ausgeführt wird. Wenn es gibt keine Ausgabe nach 20 Minuten, die Skript-Ausführung wird getötet werden.

Hier sind einige Einschränkungen, die ich beachten müssen:

  • Meine Python-version ist 2.4.2 und ich kann nicht aktualisieren.
  • Wenn die Lösung noch verwenden Teilprozess, muss ich weiterleiten Teilprozess.ROHR für alle std-Griffe zu vermeiden, diese Fehler: http://bugs.python.org/issue1124861

Gibt es einen Weg, es zu tun?

  • (Von google?) alle Rohre werden deadlock, wenn eines der Rohre Puffer gefüllt wird, und nicht gelesen. z.B. stdout deadlock, wenn stderr gefüllt ist. Nie ein ROHR, Sie wollen nicht Lesen.
InformationsquelleAutor GDICommander | 2011-04-07
Schreibe einen Kommentar