在Windows上通过python运行tracert一直在继续

时间:2019-06-06 17:04:27

标签: python

我有以下脚本,它通过python脚本运行tracert,它的工作原理类似于,它将很好地打印出所有结果。但是,在最后一跳之后,它只会不断打印出空白行,如果有人可以帮助我,请不确定我在这里做错了什么。

下面是我拥有的脚本

from subprocess import Popen, PIPE
hostname = "1.1.1.154"
p = Popen("cmd /c tracert " + hostname, shell=True, stdout=PIPE)
for line in iter(p.stdout.readline, ""):
    print(str(line, 'utf-8'))

1 个答案:

答案 0 :(得分:1)

iter将继续进行,直到p.stdout.readline返回空的字符串,但是p.stdout.readline返回空的 bytes对象

但是,您不需要使用iter(p.stdout.readline, b'')。有一个更好的选择:调用Popen时设置编码,并遍历p.stdout,因为它是一个类似于文件的对象。

from subprocess import Popen, PIPE
hostname = "1.1.1.154"
p = Popen("cmd /c tracert " + hostname, shell=True, stdout=PIPE, encoding='utf-8')
for line in p.stdout:
    print(line.rstrip('\n'))

BTW使用str.rstrip('\n')删除尾随换行符。