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.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage