簡體   English   中英

如何將 IP 地址列表繪制為活動或非活動狀態並保存到文本文件

[英]How to plot a list of IP addresses as active or inactive and save to a text file

import subprocess
import os
import matplotlib.pyplot as plt
def Main ():
    ipaddress = open('ipaddress.txt', 'a')
    with open(os.devnull, "wb") as limbo:
        for n in range(1, 100):
            ip="192.168.1.{0}".format(n)
            result=subprocess.Popen(["ping", "-n", "1", "-w", "200", ip],
                stdout=limbo, stderr=limbo).wait()
            if result:
                print (ip + " inactive")
                ipaddress.write(ip + ' inactive')
            else:
                print (ip + " active")
                ipaddress.write(ip + ' Acive')
    ip = ip.split('\n')
    ip = [float(f) for f in ip]
    slice_labels = ['Active', 'Inactive']
    # Create a pie chart from the values.
    plt.pie(ip, labels=slice_labels)
    # Add a title.
    plt.title('IP address activity')
    # Display the pie chart.
    plt.show()
Main()

代碼打印到終端並寫入文本文件,但它沒有繪制餅圖。 此外,我試圖弄清楚如何允許用戶選擇將保存到文本文件的選項作為是或否,而不僅僅是按照當前設置強制寫入,我是否會添加另一個嵌套的 if else 語句?

這對我有用:

import subprocess
import matplotlib.pyplot as plt
from pathlib import Path
from collections import Counter

addresses = Path('ipaddress.txt')
counter = Counter(a=0, i=0)

with addresses.open('w') as f:
    for n in range(1, 100):
        ip = f'192.168.1.{n}'

        cmd = subprocess.run(
            ['ping', '-n', '1', '-w', '200', ip],
            stdout=subprocess.DEVNULL,
            stderr=subprocess.DEVNULL
        )

        if cmd.returncode:
            print(f'{ip} inactive')
            f.write(f'{ip} inactive\n')
            counter.update('i')
        else:
            print(f'{ip} active')
            f.write(f'{ip} active\n')
            counter.update('a')

labels = ['Active', 'Inactive']
plt.pie(counter.values(), labels=labels)
plt.title('IP address activity')
plt.show()

我希望它有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM