【问题标题】:How to plot a list of IP addresses as active or inactive and save to a text file如何将 IP 地址列表绘制为活动或非活动并保存到文本文件
【发布时间】:2019-11-25 06:51:31
【问题描述】:
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 语句吗?

【问题讨论】:

  • 我猜你错过了从ip = ip.split('\n')开始的一个缩进级别。
  • 在进行更改后,我得到一个 ValueError: could not convert string to float: '192.168.1.99'
  • 好的。检查我的答案。

标签: python matplotlib python-3.7


【解决方案1】:

这对我有用:

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

希望对你有帮助。

【讨论】:

  • 谢谢。这很有帮助,但是当我运行它时,所有地址都以非活动状态返回。
  • 您使用的是什么操作系统?在 Linux 上,我的命令是 ['/bin/ping', '-n', '-q', '-c', '1', '-W', '1', ip],这对我来说很好。
  • 视窗。我想通了。在这一行: ip = f'192.168.0.{n}' 只需更改为 ip = f'192.168.1.{n}' 以获得正确的输出谢谢您的帮助,我很感激。跨度>
  • 哦!我懂了。那是我正在测试的本地网络。对此感到抱歉。如果可能,请将我的答案标记为已接受。 :-)
  • 没问题,我接受了,谢谢你的帮助!小心cya :)
猜你喜欢
  • 2014-10-17
  • 1970-01-01
  • 2022-10-02
  • 2013-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-24
  • 1970-01-01
相关资源
最近更新 更多