Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python ip输出错误_Python_Subprocess_Output - Fatal编程技术网

python 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(

从这个脚本中,我只想打印具有“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()[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