os.popen子进程转换

时间:2009-10-20 00:08:30

标签: python string indexing subprocess

这段代码为我提供了BSD网络界面的虚线四边形。 我想弄清楚如何使用子进程模块。

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

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

感谢。

2 个答案:

答案 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软件包上发现了一个帖子,旨在通过更好的跨平台支持来实现这一目标。