0

这个片段让我得到了我的 BSD 网络接口的虚线四边形。我想弄清楚如何改用 subprocess 模块。

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

好像我不能以完全相同的方式使用子流程。我不认为我想要 shell=True 或 PIPE。我应该怎么做才能使输出可索引?

谢谢。

4

2 回答 2

1
from subprocess import Popen, PIPE

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

为了更优雅,隐藏细节:

def getBSDIP():
   from subprocess import Popen, PIPE
   import string

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

如果您打算使用子流程来执行此操作,那么优雅会受到一些限制,因为您本质上是在做类似屏幕抓取之类的事情,除了这里您是在脚本抓取。如果您想要一个真正通用的解决方案,请使用套接字库,即让 Python 处理可移植性。

通常,当您查看一些代码并希望有一种更简洁的方法来执行此操作时,这意味着您需要质疑您的假设,并更改解决方案的算法或架构。

于 2009-10-20T00:14:42.907 回答
0

为什么不使用类似的东西:

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

如在Python 中查找本地 IP 地址并删除子进程依赖项?该问题还有其他一些建议。

我还在netifaces包上找到了一篇文章,旨在通过更好的跨平台支持来做到这一点。

于 2009-10-20T00:12:04.863 回答