将输出提取到 csv - python

Fetching output to csv - python

我创建了一个 python 脚本来通过 IP 测试多台服务器的 ping 状态,但我需要以附加格式导出到 CSV。有人可以帮忙吗。

with open('path_to_file/servers.json') as f:
    data=json.load(f)

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  #Create a TCP/IP socket
for ip_address in data:

  rep=os.system('ping ' + ip_address)

  if rep == 0:
   print("Server %s is up" % ip_address)
  else:
   print("Server %s is down" % ip_address)

enter image description here

您可以使用 csv 模块。

例如:

import os
import csv

data = ['127.0.0.1', '0.0.0.1']

with open('servers.csv', 'w') as f:
    writer = csv.writer(f)
    writer.writerow(['IP address', 'Status'])
    
    for ip_address in data:
        
        rep = os.system('ping -c1 -w1 ' + ip_address)

        if rep == 0:
            status = 'success'
        else:
            status = 'failure'
        
        writer.writerow([ip_address, status])

给予:

IP address,Status
127.0.0.1,success
0.0.0.1,failure

除了关于 CSV 的问题,我还添加了 ping 命令行选项 -c1(只发送一个数据包)和 -w1(最多等待一秒钟)正在使用,否则将无法完成。您可能还想抑制 ping 终端输出,例如在 Linux 下,在 os.system 调用中添加 + '> /dev/null'

请尝试以下程序

with open('path_to_file/servers.json') as f:
    data=json.load(f)

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  #Create a TCP/IP socket
with open("output.csv","w") as f:
    f.write("IP address,status\n")
    for ip_address in data:
      rep=os.system('ping ' + ip_address)
      if rep == 0:
       f.write("%s,success\n" % ip_address)
      else:
       f.write("%s,failure\n" % ip_address)