了解Popen.communicate

我有一个名为的脚本1st.py,可创建一个REPL(read-eval-print-loop):


print "Something to print"

while True:

    r = raw_input()

    if r == 'n':

        print "exiting"

        break

    else:

        print "continuing"

然后1st.py,我用以下代码启动:


p = subprocess.Popen(["python","1st.py"], stdin=PIPE, stdout=PIPE)

然后尝试:


print p.communicate()[0]

它失败,提供了以下追溯:


Traceback (most recent call last):

  File "1st.py", line 3, in <module>

    r = raw_input()

EOFError: EOF when reading a line

你能解释一下这里发生了什么吗?当我使用时p.stdout.read(),它将永远挂起。


慕容森
浏览 1084回答 3
3回答

素胚勾勒不出你

您的第二部分代码将第一部分代码作为带有管道输入和输出的子过程开始。然后,它关闭其输入并尝试读取其输出。代码的第一位尝试从标准输入中读取内容,但是启动它的进程关闭了其标准输入,因此它立即到达文件结尾,Python变成了异常。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python