Popen espera el proceso del niño, incluso cuando el niño inmediato ha terminado

Estoy trabajando con Python 2.7 en Windows 8 / XP.

Tengo un programa A que ejecuta otro programa B usando el siguiente código:

p = Popen(["B"], stdout=PIPE, stderr=PIPE)
stdout, stderr = p.communicate()
return

B ejecuta una secuencia de comandos por lotes C. C es una secuencia de comandos de larga ejecución y quiero que B salga aunque C no haya terminado. Lo he hecho usando el siguiente código (en B):

p = Popen(["C"])
return

Cuando ejecuto B, funciona como se esperaba. Cuando ejecuto A, sin embargo, esperaba que saliera cuando B salga. Pero A espera hasta que C salga aunque B ya haya salido. ¿Alguna idea sobre lo que está pasando y qué soluciones posibles podrían ser?

Desafortunadamente, la solución obvia de cambiar A para parecer B no es una opción.

Aquí hay un código de ejemplo funcional para ilustrar este problema:https://www.dropbox.com/s/cbplwjpmydogvu2/popen.zip?dl=1

Cualquier aporte se agradecerá.

Respuestas a la pregunta(2)

Su respuesta a la pregunta