Popen espera pelo processo da criança mesmo quando o filho imediato tiver terminado

Estou trabalhando com o Python 2.7 no Windows 8 / XP.

Eu tenho um programa A que executa outro programa B usando o seguinte código:

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

B executa um script em lote C. C é um script de longa execução e desejo que B saia embora C ainda não tenha terminado. Eu fiz isso usando o seguinte código (em B):

p = Popen(["C"])
return

Quando eu corro B, funciona como esperado. Quando eu executo A, no entanto, eu esperava que ele saísse quando B sair. Mas A espera até C sair, embora B já tenha saído. Alguma idéia do que está acontecendo e quais possíveis soluções poderiam ser?

Infelizmente, a solução óbvia de mudar A para parecer B não é uma opção.

Aqui está um código de exemplo funcional para ilustrar esse problema:https://www.dropbox.com/s/cbplwjpmydogvu2/popen.zip?dl=1

Qualquer entrada é muito apreciada.

questionAnswers(2)

yourAnswerToTheQuestion