2015-11-04 302 views
1

即时通讯使用Python 3.5,我的代码如下:Process.stdout.readline()不正确输出

鉴于a_sentence程序while循环过程中挂起,因为line_read是“”,所以它永远不会增加nl_c,因此永远不会退出循环,我对使用子流程相对来说比较陌生,所以我不确定问题出在哪里,是不是正确读取或输出。 tl; dr当它应该是一个任意字符串时,子进程的输出是“”。

有人可以指示我在正确的方向上获得line_read = proc.stdout.readline()是上面输入的行吗?

+0

反正什么是“a_sentence”?你不显示它的初始化。不知道你给我们一个你的问题的MCVE。 – RobertB

+0

a_sentence只是一个任意的句子字符串。我编辑了代码来举例。 – SharpObject

+0

你在哪里打电话给'沟通()'? – RobertB

回答

0

readline返回一行文本,包括尾随的新行,直到流在另一端关闭。一旦所有数据都被读取,它就会开始返回空字符串,让调用者知道流被关闭,并且永远不会有新数据。一般来说,while循环应该在返回空字符串时中断。

您还应该在末尾调用proc.wait(),以便清理有关死点进程的系统信息。

+0

然后当打印'line_read = proc.stdout.readline()'不应该返回字符串输入上面几行?我的问题是,理论上应该将字符串写入子进程,但是当我调用'line_read = proc.stdout.readline()'时不会输出字符串,因为我尝试打印line_read,并且首先得到的是“”,而不是我最初输入的字符串。 – SharpObject

+0

这只是意味着被调用的进程没有像你期望的那样工作。您可以查看stderr和返回代码以获取更多详细信息。但是,当readline返回“”时,意味着子进程关闭了输出管道,不会给你更多的数据。 – tdelaney

+0

好吧,我认为它是一个子进程的问题。调用stderr返回'无',所以我不知道如何解决这个问题,但感谢您的帮助! – SharpObject