这段代码为我提供了BSD网络界面的虚线四边形。 我想弄清楚如何使用子进程模块。
ifcfg_lines = os.popen("/sbin/ifconfig fxp0").readlines()
x = string.split(ifcfg_lines[3])[1]
好像我不能以完全相同的方式使用子进程。 我认为我不想要shell = True或PIPE。 我该怎么做才能使输出可转换?
感谢。
答案 0 :(得分: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])
如果你打算使用子进程来做到这一点,那么优雅有点受限,因为你基本上做了像screenscraping这样的事情,除非你在这里进行脚本编写。如果你想要一个真正通用的解决方案,请使用套接字库,即让Python处理可移植性。
通常,当您查看一些代码并希望有更好的清洁方法时,这意味着您需要质疑您的假设,并更改解决方案的算法或体系结构。
答案 1 :(得分:0)
为什么不使用类似的东西:
import socket
ipadr = socket.gethostbyname(socket.gethostname())
在Finding Local IP Addresses in Python中并删除子进程依赖项?该问题还有其他一些建议。
我还在netifaces软件包上发现了一个帖子,旨在通过更好的跨平台支持来实现这一目标。