Popen.communicate () löst OSError aus: "[Errno 10] Keine untergeordneten Prozesse"

8

Ich versuche, einen Kindprozess zu starten und seine Ausgabe auf Linux von Python mit dem Unterprozessmodul zu erhalten:

%Vor%

Allerdings erlebe ich einige Schwächen: manchmal würde p.communicate () werfen

%Vor%

Was kann diese Ausnahme verursachen? Gibt es hier irgendeinen Nicht-Determinismus oder eine Race-Condition, die Blähungen verursachen können?

    
Lajos Nagy 17.06.2009, 18:40
quelle

4 Antworten

6

Fangen Sie SIGCHLD im Skript ab? Wenn Sie dann sind, wird Popen nicht wie erwartet ausgeführt, da es für dieses Signal auf seinen eigenen Handler angewiesen ist.

Sie können nach SIGCHLD-Handlern suchen, indem Sie den Popen-Aufruf auskommentieren und dann ausführen:

%Vor%

wenn Sie etwas ähnliches sehen:

%Vor% Dann sind Sie in Schwierigkeiten. Sie müssen den Handler vor dem Aufruf von Popen deaktivieren und ihn dann zurücksetzen, nachdem die Kommunikation abgeschlossen ist (dies könnte zu einem Wettlauf führen, seien Sie also vorsichtig).

%Vor%

Es wurde ein Python-Fehler gemeldet, und soweit ich ihn sehe, wurde er noch nicht aufgelöst:

Ссылка

Ich hoffe, das hilft.

    
Vukasin Toroman 01.10.2010 09:16
quelle
3

Sie könnten auf den hier erwähnten Fehler stoßen: Ссылка

    
David Narayan 17.06.2009 20:32
quelle
0

Ich kann das auf meinem Python (2.4.6-1ubuntu3) nicht reproduzieren. Wie läuft dein Skript? Wie oft passiert das?

    
bukzor 29.07.2009 05:18
quelle
0

Ich habe dieses Problem mit Python 2.6.4 kennengelernt, das ich in mein Home-Verzeichnis eingebaut habe (weil ich das "eingebaute" Python auf dem Rechner nicht upgraden möchte).

Ich habe daran gearbeitet, indem ich subprocess.Popen() durch (die veraltete) os.popen3() ersetzt habe.

    
Daryl Spitzer 23.02.2010 19:35
quelle

Tags und Links