【问题标题】:Process hangs when communicating with an interactive program与交互式程序通信时进程挂起
【发布时间】:2019-07-15 09:08:01
【问题描述】:

我创建了一个简单的echo.py,如下所示:

import sys

while True:
    s = sys.stdin.readline()
    s = s.strip('\n')
    if s == 'exit':
        break

    sys.stdout.write("You typed: %s\n" % s)

它在终端上运行良好。

还有另一个与echo.py 交互的程序,名为main.py

import subprocess

if __name__ == '__main__':
    proc = subprocess.Popen(['python', 'echo.py'],stdin=subprocess.PIPE,
                            stdout=subprocess.PIPE,stderr=subprocess.PIPE)

    proc.stdin.write(b'Hello\n')
    proc.stdin.flush()
    print(proc.stdout.readline())

    proc.stdin.write(b'Hello World\n')
    proc.stdin.flush()
    print(proc.stdout.readline())

    proc.terminate()

main.py 永远挂起。 问题是如果我使用['python', '-i'] 创建子进程,它就可以工作。

【问题讨论】:

    标签: python subprocess interactive


    【解决方案1】:

    sys.stdout.flush() 添加到echo.py。如果您使用 Popen 而不是终端运行进程,则缓冲的工作方式会有所不同。

    【讨论】:

      【解决方案2】:

      我认为问题出在 while 循环上。您正在打开一个子进程,写入并刷新,它会完成所有这些,但由于循环,它永远不会完成 readline()。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-15
        • 1970-01-01
        • 2011-03-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-24
        相关资源
        最近更新 更多