Python将行转换为列表

时间:2011-02-26 01:23:16

标签: python

我使用带有awk的ifconfig命令来捕获系统的ip地址

$ ifconfig  | grep -E 'inet.[0-9]' | awk '{ print $2}'

127.0.0.1
192.168.8.2

如何使用python将o / p转换为列表?

6 个答案:

答案 0 :(得分:6)

import sys
list_of_lines = [line.strip() for line in sys.stdin]

答案 1 :(得分:3)

您可能只是跳过shelling来调用命令管道。您可以在不离开Python的情况下获取IP地址。如果您只需要非环回IP:

>>> socket.gethostbyname_ex(socket.gethostname())
('furby.home', [], ['192.168.1.5'])
>>> socket.gethostbyname_ex(socket.gethostname())[2][0]
'192.168.1.5'

要获得环回,

>>> socket.gethostbyname_ex('localhost')
('localhost', [], ['127.0.0.1'])

还有一个名为netifaces的模块,它将在one fell swoop中执行此操作。

答案 2 :(得分:1)

import subprocess
lines = subprocess.check_output(["ifconfig  | grep -E 'inet.[0-9]' | awk '{ print $2
}'"]).split('\n')

答案 3 :(得分:1)

谢谢大家。我可以这样做。

ipa=[]
f=os.popen("ifconfig  | grep -E 'inet.[0-9]' | awk '{ print $2}'")
for i in f.readlines():
     ipa.append(i.rstrip('\n'))
return ipa

答案 4 :(得分:1)

我刚刚修改了@Pujan发布的代码,使其适用于linux。 (在Ubuntu 12.04中测试):

import os
ipa=[]
f=os.popen("/sbin/ifconfig | grep -i \"inet\" | grep -iv \"inet6\" | " +   "awk {'print $2'} | sed -ne 's/addr\:/ /p'")
for i in f.readlines():
    ipa.append(i.rstrip('\n'))
print ipa

答案 5 :(得分:0)

使用sys.stdin读取此输出。

然后按如下方式重定向输出:

$ ifconfig  | grep -E 'inet.[0-9]' | awk '{ print $2}' | myProg.py