Popen wartet auf Kind-Prozess, auch wenn das unmittelbare Kind beendet wurde
Ich arbeite mit Python 2.7 unter Windows 8 / XP.
Ich habe ein Programm A, das ein anderes Programm B mit dem folgenden Code ausführt:
p = Popen(["B"], stdout=PIPE, stderr=PIPE)
stdout, stderr = p.communicate()
return
B führt ein Batch-Skript C aus. C ist ein Skript mit langer Laufzeit, und ich möchte, dass B beendet wird, obwohl C noch nicht fertig ist. Ich habe es mit dem folgenden Code gemacht (in B):
p = Popen(["C"])
return
Wenn ich B laufen lasse, funktioniert es wie erwartet. Wenn ich jedoch A ausführe, habe ich erwartet, dass es beendet wird, wenn B beendet wird. Aber A wartet, bis C beendet ist, obwohl B bereits beendet ist. Irgendwelche Ideen, was passiert und welche möglichen Lösungen könnten sein?
Leider ist die naheliegende Lösung, A so zu ändern, dass es wie B aussieht, keine Option.
Hier ist ein funktionaler Beispielcode zur Veranschaulichung dieses Problems:https://www.dropbox.com/s/cbplwjpmydogvu2/popen.zip?dl=1
Jede Eingabe wird sehr geschätzt.