2016-03-18 104 views
1

我需要编写一个简单的python(python3)脚本来存储我的本地IP地址到一个变量中,以便稍后操作它,我阅读了很多内容,但我不明白我在哪里做错了,这里有一大块为了更好地理解代码..如何存储bash命令的输出?

#!/usr/bin/env pyhton3 
import os 
import subprocess 
import sys 
import fileinput 
localip = subprocess.call(["ifconfig | grep 'inet addr' | cut -d ':' -f2 | grep 'Bcast' | cut -d ' ' -f1"], shell=True) 
print localip 
... 
... 
... 

现在,当我excecute它,它打印我:

[email protected]:~/Documents $ python change.py 
192.168.1.6 
0 

看来我无法找到我自己解决这一点,任何人都可以告诉我我在哪里做错了并帮助我?谢谢。

+0

正如上文[文档](https://docs.python.org/2/library/subprocess.html#subprocess.call),通过'subprocess.call'返回的值是命令的返回代码,用于指示命令是否成功。在这种情况下,它是零,因为没有错误。 – kindall

+0

不要出去获取有关您的网络接口的信息。我不知道这是否是规范的解决方案,但它花了10秒钟才找到https://pypi.python.org/pypi/netifaces/ –

回答

1

在python2,你会怎么做:

stdout = subprocess.check_output(args, shell=true) 

在python3,你也可以这样做:

completed_process = subprocess.run(args, shell=True) 
stdout = completed_process.stdout 

这可能是一个更有用的接口

2

为了解决您的XY Problem,为什么不使用Python本身来获取IP /主机名?

>>> import socket 
>>> socket.gethostname() 
'MY-COMPUTER' 
>>> socket.gethostbyname(socket.gethostname()) 
'192.168.1.126' 
>>> socket.getfqdn() 
'my-computer.local' 
>>> socket.gethostbyname(socket.getfqdn()) 
'192.168.1.126'