我有以下脚本,它通过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'))
答案 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')
删除尾随换行符。