Как сделать Ping Test устройств из списка csv с помощью Python - PullRequest
0 голосов
/ 05 июня 2018

Я пытаюсь импортировать CSV-файл с именами хостов и выполнить тест ping для таких ~ 100 устройств.

CSV1:

Hostname  
abc  
bcd  
efg  
.  
.  
and so on

Я хочу выполнить тест ping и написатьping-статус, будь то UP или Down в выходном CSV-файле вместе с соответствующими именами хостов.

Примерно так:

Вывод:

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.

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])

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Наконец-то исправлен весь код:

Примечание: я интегрирую nslookup, ping test и ip address в этот скрипт для записи FQDN, PING TEST и IP ADDRESS, передав список устройств, которые у меня есть вмой CSV-файл

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 голосов
/ 06 июня 2018
#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']))
...