子过程输出到标准输出和PIPE

我正在使用这样的subprocess模块:

ping = subprocess.Popen('fping.exe 192.168.2.3 196.65.58.69', stdout=PIPE)
output = ping.stdout.readlines()

我需要output列表以便稍后在程序中处理它,但是由于stdout指向PIPE因此它不会将结果输出到控制台。 我想获得控制台输出(在执行时)和output列表。

我怎样才能做到这一点 ?

我做了一个搜索,并在这里得到了答案,但我无法实现它。

我在Windows环境中使用Python 3.x。

谢谢。


有没有这样的事情,作为一个管道,去两个地方。 写入管道的所有内容只能被读取一次。 (虽然理论上您的程序和控制台可以访问相同的输出管道,但是如果您成功完成此任务,那么只有一部分数据会传送到您的程序中,并且只有那些不会最终生效的数据控制台。)要获得所有输出到您的程序和控制台,有人将不得不读取和复制数据。 在一个类似unix的系统上,您可能会使用“tee”命令,但您的Windows计算机上可能没有该命令。

因此,您必须在输出时将输出写入控制台。

在这种情况下,你可能会在循环中使用readline()而不是readlines()。


我找到了一种方法来做到这一点:

for line in os.popen("Fping x.x.x.x x.x.x.x -l"):
    ipList.append(line)
    print(line)

这样,我可以将Fping程序的结果放到列表中,并在执行时将其打印到屏幕上,因为os.popenfor循环不等待程序结束,但始终在程序的每一行循环。

链接地址: http://www.djcxy.com/p/77139.html

上一篇: subprocess output to stdout and to PIPE

下一篇: Python subprocess hangs as Popen when piping output