Python popen python.exe

时间:2013-12-21 07:01:29

标签: python windows

我很困惑为什么下面的代码不打印stdout并退出,而是挂起(在Windows上)。有什么理由吗?

import subprocess
from subprocess import Popen

def main():
    proc = Popen(
        'C:/Python33/python.exe',
        stderr=subprocess.STDOUT,
        stdin=subprocess.PIPE,
        stdout=subprocess.PIPE
    )
    proc.stdin.write(b'exit()\r\n')
    proc.stdin.flush()
    print(proc.stdout.read(1))

if __name__=='__main__':
    main()

1 个答案:

答案 0 :(得分:1)

替换以下内容:

proc.stdin.flush()

使用:

proc.stdin.close()

否则,子进程python.exe将永远等待stdin关闭。


替代方案:使用communic()

proc = Popen(...)
out, err = proc.communicate(b'exit()\r\n')
print(out)  # OR print(out[:1]) if you want only the first byte to be print.