首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >读取os.popen()输出不返回任何内容

问读取os.popen()输出不返回任何内容
EN

Stack Overflow用户
提问于 2019-01-18 08:53:09
回答 1查看 605关注 0票数 2

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

代码语言:javascript
复制
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)

我面临的问题是:当我使用上面的函数执行脚本时,tcpOpenPorts和udpOpenPorts这两个变量都返回空,即使外壳命令:

代码语言:javascript
复制
netstat -tulpn | grep -P 'tcp\b'

工作正常。

以下是该命令的输出示例:

代码语言:javascript
复制
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模块的方式有什么问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-18 08:57:21

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

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

代码语言:javascript
复制
os.popen(r"netstat ...")

(顺便说一句,我通常建议使用subprocess模块,但是在不使用shell=True的情况下,将命令与subprocess一起通过管道传输是很不方便的,而且使用shell=True会使subprocess的大部分好处落空。如果您曾经发现自己在运行时构建命令字符串,那么一定要切换到subprocess,而不是尝试使用字符串格式化来处理。)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54246369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档