阅读欧斯波本()输出不返回任何内容

2024-09-30 08:19:40 发布

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

我正在开发一个python脚本来收集关于Linux系统的一些信息,现在我正在尝试使用os.popen()收集侦听UDP e TCP端口的列表,函数如下所示:

def ports(self):
    # Gets a few lines of information about open TCP ports
    tcpOpenPorts = os.popen("netstat -tulpn | grep -P 'tcp\b'").read()
    print(tcpOpenPorts)
    # Gets a few lines of information about open UDP ports
    udpOpenPorts = os.popen("netstat -tulpn | grep -P 'tcp\b'").read()
    print(udpOpenPorts)

我面临的问题是:当我使用上面的函数执行脚本时,变量tcpOpenPortsudpOpenPorts都返回空,即使shell命令:

netstat -tulpn | grep -P 'tcp\b'

工作正常。你知道吗

下面是命令的输出示例:

tcp        0      0 127.0.0.1:63342         0.0.0.0:*               OUÇA       3244/java
tcp        0      0 0.0.0.0:111             0.0.0.0:*               OUÇA       539/rpcbind
tcp        0      0 0.0.0.0:22              0.0.0.0:*               OUÇA       686/sshd
tcp        0      0 127.0.0.1:631           0.0.0.0:*               OUÇA       4466/cupsd
tcp        0      0 127.0.0.1:6942          0.0.0.0:*               OUÇA       3244/java

我使用os模块的方式有什么问题吗?你知道吗


Tags: 函数脚本osouportsgreptcpudp
1条回答
网友
1楼 · 发布于 2024-09-30 08:19:40

单引号阻止shell处理反斜杠,但是shell并不是唯一需要停止处理反斜杠的东西。Python字符串文字语法还为反斜杠指定了特殊的含义,因此shell接收的是一个反斜杠字符,而不是反斜杠和b

使用原始字符串文字避免Python的反斜杠处理:

os.popen(r"netstat ...")

(顺便说一句,我通常会建议使用subprocess模块,但是如果不使用shell=True,将命令与subprocess结合使用会很尴尬,而且使用shell=True会破坏subprocess的大部分好处。但是,如果您发现自己在运行时构建命令字符串,那么一定要切换到subprocess,而不是尝试使用字符串格式处理事情。)

相关问题 更多 >

    热门问题