之前,我问过这个问题:
如何使用本机 python 执行 ping 或 traceroute?
但是,由于 python 不是以 root 身份运行的,因此它无法打开在本机 python 中执行 ping/traceroute 所需的原始 ICMP 套接字。
这让我回到了使用系统的 ping/traceroute shell 命令。这个问题有几个使用该subprocess
模块的示例,这些示例似乎运行良好:
不过,我还有一个要求:我需要能够在输出生成时访问它(例如,对于长时间运行的跟踪路由。)
上面的示例都运行 shell 命令,然后只有在命令完成后才能访问完整的输出。有没有办法在生成命令输出时访问它?
编辑:根据 Alex Martelli 的回答,以下是有效的:
import pexpect
child = pexpect.spawn('ping -c 5 www.google.com')
while 1:
line = child.readline()
if not line: break
print line,