Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么可以';我不能从一个通过Python脚本调用的进程中获得输出吗?_Python_Linux_Process - Fatal编程技术网

为什么可以';我不能从一个通过Python脚本调用的进程中获得输出吗?

为什么可以';我不能从一个通过Python脚本调用的进程中获得输出吗?,python,linux,process,Python,Linux,Process,基于此, 问题,我正在尝试通过Python获取进程的输出 这里有代码: from subprocess import Popen, PIPE connection_string = "yowsup-cli demos --yowsup --config config" popen_parameters = connection_string.split(" ") proc = Popen(popen_parameters, stdout=PIPE, stderr=PIPE) while Tr

基于此, 问题,我正在尝试通过Python获取进程的输出

这里有代码:

from subprocess import Popen, PIPE

connection_string = "yowsup-cli demos --yowsup --config config"
popen_parameters = connection_string.split(" ")
proc = Popen(popen_parameters, stdout=PIPE, stderr=PIPE)

while True:
    line = proc.stdout.readline()

    if line != '':
        #the real code does filtering here
        print "Result:", line.rstrip()

    proc.stdout.flush()
不幸的是,没有归还任何东西。顺便说一句,我需要与发送和接收数据的进程进行交互。我怎样才能做到这一点


谢谢

即使在发送命令的输出后,while循环也没有条件退出。 试试这个:

如果行!='':
#真正的代码在这里进行过滤
打印“结果:”,行.rstrip()
其他:

中断
首先,如果子进程实际上正在写入其标准输出,那么代码应该可以工作。如果命令中有错误,则输出可能会显示在stderr上

但是请注意,您的代码没有退出循环,因此您需要修复它,例如,在读取空字符串时调用
break

但是有更好的办法。不要直接读取子进程的stdout,请使用:

问题的另一部分涉及与子进程的交互。在启动子进程并向其发送单个输入的简单情况下,仍然可以通过向其传递字符串参数来使用
Popen.communicate()
。请注意,您还需要设置标准DIN管道。因此,如上所述,但:

proc = Popen(popen_parameters, stdin=PIPE, stdout=PIPE, stderr=PIPE)

data = 'data to send to child'
out, err = proc.communicate(data)

如果您与孩子的交互更复杂,您应该考虑使用为此使用的模块。虽然可以使用

Popen()
执行此操作,但在读取/写入管道的进程的缓冲和死锁方面存在一些问题,因此最好避免这些问题。

感谢您的评论。如果我将连接字符串替换为“ping 192.168.0.9-c4”,那么您的代码工作得非常好。但是我仍然有两个问题:1-我需要保持与流程的连接,因为我将与它交互。在这种情况下,通信将等待该过程完成。2-与ping命令不同,我没有从yowsup得到任何答案。你知道我怎样才能把它修好吗?谢谢@谢谢你的编辑。“这是”由于输入错误,而不是无知。@user1688175-我不太熟悉
yowsup cli
-从命令行运行同一命令时,您看到了什么?输出(如果有)是否显示在标准输出或标准输出上?您是否查看了
peexpect
?这是正确的,但对于根本没有输出的情况,这不是一个解决方案。如果没有输出,就没有输出。我的建议是关于控制流程,最终打破无休止的循环。
proc = Popen(popen_parameters, stdin=PIPE, stdout=PIPE, stderr=PIPE)

data = 'data to send to child'
out, err = proc.communicate(data)