2016-03-18 137 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'