Dav*_*gac 3 python ping traceroute
早些时候,我问过这个问题:
如何使用本机python执行ping或traceroute?
但是因为python没有以root身份运行,所以它无法打开在本机python中执行ping/traceroute所需的原始ICMP套接字.
这让我回到使用系统的ping/traceroute shell命令.这个问题有几个使用该subprocess
模块的例子似乎运作良好:
我还有一个要求:我需要能够在生成时访问输出(例如,对于长时间运行的traceroute.)
上面的示例都运行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,
Run Code Online (Sandbox Code Playgroud)
您应该阅读subprocess模块的文档,它描述了如何运行外部进程并实时访问其输出。
基本上,你做
from subprocess import Popen, PIPE
p = Popen(['tracert', host], stdout=PIPE)
while True:
line = p.stdout.readline()
if not line:
break
# Do stuff with line
Run Code Online (Sandbox Code Playgroud)
实际上,您链接到的 SO 问题中的答案非常接近您的需要。Corey Goldberg 的回答使用了管道和readline
,但由于它运行 ping-n 1
并持续时间不足以产生影响。
归档时间: |
|
查看次数: |
14548 次 |
最近记录: |