我正在使用subprocess
模块:
ping = subprocess.Popen('fping.exe 192.168.2.3 196.65.58.69', stdout=PIPE)
output = ping.stdout.readlines()
我需要output
列表以便稍后在程序中处理它,但似乎因为stdout被定向到PIPE
它不会将结果输出到控制台。我想获得控制台输出(正在执行)和output
列表。
我该怎么做?
我已经完成了搜索,得到了答案here,但我无法实现。
我在Windows环境中使用Python 3.x。
感谢。
答案 0 :(得分:0)
没有管道可以到达两个地方。写入管道的所有内容只能读取一次。 (虽然从理论上讲,您的程序和控制台可以访问相同的输出管道,但如果您成功执行此操作,那么只有部分数据会转到您的程序,而只有那些数据才能进入您的程序控制台。)要获得程序和控制台的所有输出,有人必须阅读并复制数据。在类似unix的系统上,你可以使用“tee”命令,但你可能在Windows机器上没有这个。
因此,您必须在输入时将输出写入控制台。
在这种情况下,您可以放弃在循环中使用readline()而不是readlines()。
答案 1 :(得分:0)
我找到了一种方法可以做到这一点:
for line in os.popen("Fping x.x.x.x x.x.x.x -l"):
ipList.append(line)
print(line)
这样,我就可以将Fping程序的结果导入到列表中,并在执行时将其打印到屏幕上,因为for
循环os.popen
并不是'{1}}等待程序完成,但总是在程序的每一行循环。