如何使用 Python 从 csv 列表中对设备进行 Ping 测试
How to do Ping Test of devices from csv list with Python
我正在尝试导入一个包含主机名的 csv 文件,并对大约 100 台设备进行 ping 测试。
CSV1:
Hostname
abc
bcd
efg
.
.
and so on
我想做 ping 测试,并在输出的 csv 文件中写入 ping 状态(UP 或 Down)以及相应的主机名。
像这样:
输出:
Hostname Ping Status
abc UP
bcd DOWN
efg DOWN
. .
. .
and so on
我已尽力在互联网上查找,但没有找到任何运气。我是 python 的新手,还处于学习阶段。请帮忙!!
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 控制台中获取输出,它显示的 ping 详细信息与我们从 'CMD' 中获取的信息相同。但是我的输出 csv 文件没有受到影响。
这是代码的完整版本;尽管我仍在努力打印这些设备的 IP 地址,并在将其写入 csv 文件时获得正确的 headers。
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])
#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']))
最终修复了整个代码:
注意:我在这个脚本中集成了 nslookup、ping 测试和 ip 地址,通过传入我在 csv 文件中的设备列表来编写 FQDN、PING 测试和 IP 地址
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])
我正在尝试导入一个包含主机名的 csv 文件,并对大约 100 台设备进行 ping 测试。
CSV1:
Hostname
abc
bcd
efg
.
.
and so on
我想做 ping 测试,并在输出的 csv 文件中写入 ping 状态(UP 或 Down)以及相应的主机名。
像这样:
输出:
Hostname Ping Status
abc UP
bcd DOWN
efg DOWN
. .
. .
and so on
我已尽力在互联网上查找,但没有找到任何运气。我是 python 的新手,还处于学习阶段。请帮忙!!
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 控制台中获取输出,它显示的 ping 详细信息与我们从 'CMD' 中获取的信息相同。但是我的输出 csv 文件没有受到影响。
这是代码的完整版本;尽管我仍在努力打印这些设备的 IP 地址,并在将其写入 csv 文件时获得正确的 headers。
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])
#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']))
最终修复了整个代码:
注意:我在这个脚本中集成了 nslookup、ping 测试和 ip 地址,通过传入我在 csv 文件中的设备列表来编写 FQDN、PING 测试和 IP 地址
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])