Python Popen pendurado com psexec - resultados indesejados

Estou tendo um problema com o subprocess.Popen e o que eu acredito ser pipe. Eu tenho o seguinte bloco de código que funciona sem emitir 100% do tempo ao executar a partir do CLI:

    p = subprocess.Popen("psexec \\\\" + serverName.get() + " cmd /c \
        ver & \
        echo %USERDOMAIN% & \
        dir /a C:\pagefile.sys | find \"pagefile.sys\" & \
        dir C:\ | find \"bytes free\" & \
        dir D:\ | find \"bytes free\" ", \
        stdin=None, stdout=subprocess.PIPE, stderr=None)

    ### Assign the results from the Popen
    results = p.communicate()[0]
    rc = p.returncode

    print 'results: ' + str(results)
    sys.exit()

Resultado:

PsExec v1.90 - Execute processes remotely
Copyright (C) 2001-2007 Mark Russinovich
Sysinternals - www.sysinternals.com

The device is not ready.
cmd exited on XXXXXXX with error code 1.

Microsoft Windows XP [Version 5.1.2600]
PROD
02/23/2011  09:37 AM     1,610,612,736 pagefile.sys
              49 Dir(s)  17,104,437,248 bytes free

Eu tinha esse programa completo, mas uma vez que o compilava com py2exe, ele simplesmente travava ou travava. Eu rastreei esse problema até py2exe, não gostando de stdin, out ou err errado no subprocesso. Modifiquei meu código da seguinte maneira:

    p = subprocess.Popen("psexec \\\\" + serverName.get() + " cmd /c \
        ver & \
        echo %USERDOMAIN% & \
        dir /a C:\pagefile.sys | find \"pagefile.sys\" & \
        dir C:\ | find \"bytes free\" & \
        dir D:\ | find \"bytes free\" ", \
        stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)

    p.stdin.close()

    ### Assign the results from the Popen
    results = p.communicate()[0]
    rc = p.returncode

    print 'results: ' + str(results)
    sys.exit()

Esse código também funciona 100% do tempo, mas quando imprimo resultados, ele mostra apenas as mensagens psexec padrão, não a saída dos comandos executados.

Resultado:

results:
PsExec v1.90 - Execute processes remotely
Copyright (C) 2001-2007 Mark Russinovich
Sysinternals - www.sysinternals.com

cmd exited on XXXXXXX with error code 1.

Tentei combater isso adicionando shell = true às opções do subprocesso, mas quando faço isso, o programa trava 99% do tempo. Na verdade, ele será executado 1% do tempo. Notei que, enquanto o programa está paralisado, se eu entrar no gerenciador de tarefas e matar manualmente o processo psexec, a saída desejada será mostrada. Isso está me deixando louco e eu tenho procurado para sempre sem encontrar nada. O código está sendo executado no WinXP python v2.7. Entre em contato se tiver alguma dúvida ou precisar de informações adicionais.

Código de suspensão:

    p = subprocess.Popen("psexec \\\\" + serverName.get() + " cmd /c \
        ver & \
        echo %USERDOMAIN% & \
        dir /a C:\pagefile.sys | find \"pagefile.sys\" & \
        dir C:\ | find \"bytes free\" & \
        dir D:\ | find \"bytes free\" ", \
        stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)

    p.stdin.close()

    ### Assign the results from the Popen
    results = p.communicate()[0]
    rc = p.returncode

    print 'results:' + str(results)
    sys.exit()

Saída desejada após matar o psexec.exe no gerenciador de tarefas:

results:
PsExec v1.90 - Execute processes remotely
Copyright (C) 2001-2007 Mark Russinovich
Sysinternals - www.sysinternals.com


PROD
02/23/2011  09:37 AM     1,610,612,736 pagefile.sys
              49 Dir(s)  17,102,487,552 bytes free
The device is not ready.

questionAnswers(3)

yourAnswerToTheQuestion