os.popen公司子流程转换

2024-10-02 18:20:37 发布

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

这段代码让我得到了BSD网络接口的虚线四边形。 我想知道如何使用subprocess模块。在

ifcfg_lines = os.popen("/sbin/ifconfig fxp0").readlines()
x = string.split(ifcfg_lines[3])[1]

似乎我不能以完全相同的方式使用子进程。 我不认为我想要的是shell=True或PIPE。 如何使输出可索引?在

谢谢。在


Tags: 模块代码osbsd网络接口subprocess虚线lines
2条回答
from subprocess import Popen, PIPE

ifcfg_lines = Popen("/sbin/ifconfig fxp0",shell=True,stdout=PIPE).stdout.readlines()
x = string.split(ifcfg_lines[3])[1]

为了更优雅一点,隐藏细节:

^{pr2}$

如果您要使用子流程来实现这一点,那么优雅就有点受限,因为您实际上是在做类似于屏幕抓取的操作,除了这里是脚本抓取。如果您想要一个真正通用的解决方案,请使用socket库,即让Python处理可移植性。在

通常,当你看到一点代码,你希望有一个更好的更干净的方法来做它,这意味着你需要质疑你的假设,并改变算法或解决方案的架构。在

为什么不使用类似于:

import socket
ipadr = socket.gethostbyname(socket.gethostname())

Finding Local IP Addresses in Python中相同,并删除子进程依赖项?在这个问题上还有一些其他的建议。在

我还发现了一篇关于netifaces包的帖子,它的目标是通过更好的跨平台支持来做到这一点。在

相关问题 更多 >