python ip输出错误
从这个脚本中,我只想打印具有“bytes From”的IP,并将输出保存为txt格式。 在添加if语句之后,我仍然获得完整的ip。请帮忙python ip输出错误,python,subprocess,output,Python,Subprocess,Output,从这个脚本中,我只想打印具有“bytes From”的IP,并将输出保存为txt格式。 在添加if语句之后,我仍然获得完整的ip。请帮忙 import subprocess with open('ips') as f: line = f.readlines() for i in line: p1=subprocess.Popen(['ping', '-c 1', i], stdout=subprocess.PIPE) output = p1.communicate(
import subprocess
with open('ips') as f:
line = f.readlines()
for i in line:
p1=subprocess.Popen(['ping', '-c 1', i], stdout=subprocess.PIPE)
output = p1.communicate()[0]
print(output)
if 'bytes from' in line:
print(output)
输出:
PING 10.11.1.1
(10.11.1.1) 56(84) bytes of data.
From 10.11.0.92 icmp_seq=1 Destination Host Unreachable
--- 10.11.1.1
ping statistics ---
1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms
您确实希望避免使用
subprocess.Popen()
,除非您知道像subprocess.run()
这样的高级包装器都不能满足您的需要
代码的直接问题(可以推断出损坏的缩进)是一次检查所有的输出行。您需要将ping
的输出拆分为单独的行,然后检查每行是否匹配
当然,检查的是IP地址,而不是来自ping
的输出,这也没有帮助。。。命名变量以更好地指示它们包含的内容是避免此类错误的好方法
from subprocess import run, PIPE
with open('ips') as ips:
for ip in ips:
ip = ip.strip() # remove trailing newline
ping = run(['ping', '-c', '1', ip],
stdout=PIPE, universal_newlines=True)
for line in ping.stdout.split('\n'):
if 'bytes from' in line:
print(line)
但是,示例中没有一行包含“bytes from”;你是说“字节数”吗 您有两个
打印(输出)
语句。一个是有条件的,一个不是有条件的。删除第一个。如果我删除第一个打印。。我在屏幕上没有看到任何东西。这是一个正确格式化源代码将显示问题的示例。更正显示的代码,使其缩进与问题代码相同。我试图清除您的格式错误。我不得不猜测你代码的缩进。请复习。谢谢你,伙计,它可以用了……)是的,ip工作时会有字节。我能再问你一些疑问吗。。请非常感谢兄弟。当你赚了20个销售代表的时候,你就可以聊天了。这里没有私人留言的设施。哦,好的。伙计,还有一件事。它等待1IP,当它完成另一个ip时。在bash中,如果我们在end中添加&In,它会变得很快。所有IP都可以一次ping。您可以使用子进程
在后台运行进程。不过,也许您需要恢复到Popen()
。并行运行多个进程并轮询其中一个进程何时产生输出是一项挑战。不管怎样,您都在重新发明现有的工具-搜索多点打印
和fping
。