首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何用Python对csv列表中的设备进行Ping测试

如何用Python对csv列表中的设备进行Ping测试
EN

Stack Overflow用户
提问于 2018-06-06 04:16:28
回答 2查看 1.9K关注 0票数 1

我正在尝试导入一个具有主机名的csv文件,并对这样的~100个设备进行ping测试。

CSV1:

代码语言:javascript
复制
Hostname  
abc  
bcd  
efg  
.  
.  
and so on

我想要执行ping测试,并在输出csv文件中写入ping状态,无论是UP还是Down,以及相应的主机名。

如下所示:

输出:

代码语言:javascript
复制
Hostname  Ping Status  
abc  UP  
bcd  DOWN  
efg  DOWN  
.  .  
.  .  
and so on

我已经尽力在互联网上查找了一下,但是没有找到任何机会。我是python的新手,还处于学习阶段。请帮帮我!!

代码语言:javascript
复制
import os
import csv

with open('CSV1.csv', 'r') as f:
    reader = csv.DictReader(f)
    rows = list(reader)

hosts = [row['CI_Name'] for row in rows]
statuses = [row['Status'] for row in rows]

for row in rows:
    #ping hosts
    hostname = row['CI_Name']
    response = os.system("ping -n 1 " + hostname)
    print ("[DEBUG]", response)
    if response == 0:
        print (hostname, 'is up')
        row['Status'] = 'Up'
    else:
        print (hostname, 'is down')
        row['Status'] = 'Down'

#write results
with open("Output Final.csv", "w") as w:
    writer = csv.writer(w)

我在Python控制台中获得了输出,它显示了与我们从'CMD‘中获得的相同的ping详细信息。但是我的输出csv文件不会被修改。

这是已完成的代码版本;尽管我仍在努力打印这些设备的ip地址,并在将其写入csv文件时获得正确的报头。

代码语言:javascript
复制
import socket
import os
import csv
name = {}
CI = {}
hostname = {}
status = {}
with open('Output1.csv', 'r', newline='') as csvinput:
    reader = csv.DictReader(csvinput)

    for rows in reader:
        CI = rows['CI_Name']
        name = socket.getfqdn(CI)
        data = name
        hostname = rows['CI_Name']
        response = os.system('ping -n 2 ' + hostname)
        if response == 0:
            status = 'Up'
        else:
            status = 'Down'
        with open('Output Final.csv', 'a', newline='') as csvoutput:
            output = csv.writer(csvoutput)
            output.writerow([hostname] + [data] + [status])
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-07 05:12:58

最后修复了整个代码:

注意:通过传入csv文件中的设备列表,我在此脚本中集成了nslookup、ping测试和ip地址,以写入FQDN、PING测试和IP地址

代码语言:javascript
复制
import socket
import os
import csv
import subprocess
name = {}
CI = {}
hostname = {}
status = {}
with open('Output1.csv', 'r', newline='') as csvinput:
    reader = csv.DictReader(csvinput)

    for rows in reader:
        CI = rows['CI_Name']
        try:
            ip = socket.gethostbyname(CI)
        except socket.error:
            pass
        name = socket.getfqdn(CI)
        data = name

        hostname = rows['CI_Name']
        response = subprocess.Popen(['ping.exe',hostname], stdout = subprocess.PIPE).communicate()[0]
        response = response.decode()
        print(response)
        if 'bytes=32' in response:
            status = 'Up'
        elif 'destination host unreachable' in response:
            status = 'Unreachable'
        else:
            status = 'Down'
        if status == 'Down':
            ip = 'Not Found'
        with open('Output Final.csv', 'a', newline='') as csvoutput:
            output = csv.writer(csvoutput)
            output.writerow([hostname] + [data] + [status] + [ip])
票数 0
EN

Stack Overflow用户

发布于 2018-06-06 06:29:44

代码语言:javascript
复制
#write results
with open("Output Final.csv", "w", newline='') as w:
    writer = csv.writer(w)
    writer.writerow(["CI_NAME","Status"])
    for r in rows:
        writer.writerow((r['CI_Name'], r['Status']))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50708269

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档