我很困惑为什么下面的代码不打印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()
答案 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.