这个片段让我得到了我的 BSD 网络接口的虚线四边形。我想弄清楚如何改用 subprocess 模块。
ifcfg_lines = os.popen("/sbin/ifconfig fxp0").readlines()
x = string.split(ifcfg_lines[3])[1]
好像我不能以完全相同的方式使用子流程。我不认为我想要 shell=True 或 PIPE。我应该怎么做才能使输出可索引?
谢谢。
这个片段让我得到了我的 BSD 网络接口的虚线四边形。我想弄清楚如何改用 subprocess 模块。
ifcfg_lines = os.popen("/sbin/ifconfig fxp0").readlines()
x = string.split(ifcfg_lines[3])[1]
好像我不能以完全相同的方式使用子流程。我不认为我想要 shell=True 或 PIPE。我应该怎么做才能使输出可索引?
谢谢。
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 处理可移植性。
通常,当您查看一些代码并希望有一种更简洁的方法来执行此操作时,这意味着您需要质疑您的假设,并更改解决方案的算法或架构。
为什么不使用类似的东西:
import socket
ipadr = socket.gethostbyname(socket.gethostname())
如在Python 中查找本地 IP 地址并删除子进程依赖项?该问题还有其他一些建议。
我还在netifaces包上找到了一篇文章,旨在通过更好的跨平台支持来做到这一点。