仅当主机在python中可ping时才尝试将其写入csv

2024-09-29 01:26:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个IP地址列表

我正试图将所有实时IP地址写入一个csv文件,但我没有任何运气

我可以将实时地址打印到stdout,但不能将它们写入csv

我的csv reader/writer对象有两个不同的函数(以防我以后要导入它们),但这不起作用

然后我试着将两者放在一个函数中,但我有点困惑如何才能将活动地址从stdout获取到csv文件

我明白我可以删除else语句

我的代码片段:

def readCsv():
    with open("random.csv", "r") as csvFile:
        csvReader = csv.reader(csvFile)
        for hosts in csvReader:
            cmd = subprocess.call(["ping", "-n", "1", hosts[0]], stdout=subprocess.PIPE)
            if cmd == 0:
                <The live hosts will need to go to the csv>
            else:
                <leave the dead hosts out of the csv>

            with open("liveHosts.csv", "w", newline="") as new_csv:
                csvWriter = csv.writer(new_csv, dialect="excel")
                for line in csvWriter:
                    csvWriter.writerows(line)
readCsv()

Tags: 文件csvthe函数地址aswithstdout
1条回答
网友
1楼 · 发布于 2024-09-29 01:26:09

可以使用与包含主机列表的输入文件相同的上下文管理器将流打开到输出文件

然后为流创建一个CSV编写器。 在子进程成功返回的条件下,可以在CSV文件中写入一行

with open("random.csv", "r") as allhosts, \
    open("liveHosts.csv", "w", newline="") as livehosts:
    csvReader = csv.reader(allhosts)
    csvWriter = csv.writer(livehosts, dialect="excel")

    for host in csvReader:
        cmd = subprocess.call(["ping", "-n", "1", host[0]], stdout=subprocess.PIPE)
        if cmd == 0:
            csvWriter.writerow(host)

相关问题 更多 >