python - psutil.net_connections() 应该返回 namedtuple,但它的行为不是一个
问题描述
我试图找出我的服务器(应该在 上运行127.0.0.1:5000
)是否真的在运行。我试图用psutil.net_connections()
它来弄清楚:
filter(lambda conn: conn.raddr.ip == '127.0.0.1' and conn.raddr.port == 5000, psutil.net_connections())
这应该给我该项目对应于我的服务器,并检查我是否真的得到了一些东西,我只需检查len(tuple(...)))
. 但是,使用我没有得到的tuple(...)
给我,因为内部元组(即确实有一个“ip”属性)。AttributeError: 'tuple' object has no attribute 'ip'
conn.raddr
定期循环时也会发生这种情况:
In [22]: for conn in psutil.net_connections():
...: if conn.raddr.ip == '127.0.0.1' and conn.raddr.port == 5000:
...: break
...: else:
...: print('server is down')
但是当像这样使用它时,它可以工作!
In [23]: a=psutil.net_connections()[0]
In [24]: a.raddr.ip
Out[24]: '35.190.242.205'
psutil 版本:5.7.2
解决方案
并非所有人raddr
都有ip
属性。文档说:
raddr
:远程地址作为(ip, port)
命名元组或 UNIX 套接字的绝对路径。当远程端点未连接时,您将获得一个空元组(AF_INET*)
或""
(AF_UNIX)。对于 UNIX 套接字,请参见下面的注释。
raddr
因此,在尝试访问ip
andport
属性之前,您应该检查它是否为空。
filter(lambda conn: conn.raddr and conn.raddr.ip == '127.0.0.1' and conn.raddr.port == 5000, psutil.net_connections())
推荐阅读
- python - XGBoost feature_names 时间序列不匹配
- java - 如何知道哪个按钮调用了某个活动?
- java - Java:使用“错误”参数实例化一个抽象类
- c# - 将值从父视图传递给局部视图
- java - Visual Studio 代码:如何在 Java 代码中重新排列和排序类成员
- java - 自定义第三方提供的战争时避免 jar 冲突(Web 应用存档)
- docker - OWASP ZAP DOCKER - 扫描 url 列表
- python-3.x - Pytest:失败测试的拆解
- c# - 为什么不能隐式实现非公共接口成员?
- sql - 加入 2 个表,但结果中存在条件列中的所有值