可以str.rstrip
任何新行或使用什麼的Martijn建議,你也可以解析使用python與輸出需要AWK或的grep這將不添加任何新行:
您可以分割:
out = subprocess.check_output(["ifconfig", "en0"])
for line in out.splitlines():
if line.lstrip().startswith("inet "):
print(line.split()[1].split(":", 2)[1])
print(ip.search(line))
break
或使用您自己的正則表達式:
import re
out = subprocess.check_output(["ifconfig", "en0"])
print(re.search('([0-9]{1,3}[\.]){3}[0-9]{1,3}', out).group())
問題的關鍵是你不需要的awk或者grep的。
如果要匹配IPv4或IPv6,也趕上時,有即沒有這樣的接口返回了一個錯誤,你可以搭乘CalledProcessError
這將提高任何非零退出狀態,很容易使用IPv4的正則表達式,但對於ipv6,使用inet6
可以更簡單地獲取ipv6地址。
from subprocess import check_output, CalledProcessError
import re
def get_ip(iface, ipv="ipv4"):
try:
out = check_output(["ifconfig", iface])
except CalledProcessError as e:
print(e.message)
return False
try:
if ipv == "ipv4":
return re.search('([0-9]{1,3}[\.]){3}[0-9]{1,3}', out).group()
return re.search("(?<=inet6 addr:)(.*?)(?=/)", out).group().lstrip()
except AttributeError as e:
print("No {} address for interface {}".format(ipv, iface))
return False
演示:
In [2]: get_ip("wlan0")
Out[2]: '192.168.43.168'
In [3]: get_ip("wlan0","ipv6")
Out[3]: 'fe80::120b:a9ff:fe03:bb10'
In [4]: get_ip("wlan1","ipv6")
wlan1: error fetching interface information: Device not found
Out[4]: False
'echo'補充說,新行.. –
沒有不僅僅。如果我運行'subprocess.check_output(「ifconfig en0 | awk'{print $ 2}'| grep -E -o'([0-9] {1,3} [\。]){3} [0-9] {1,3}'「,shell = True)''它在bash mac OS X上檢索我的IP地址,返回行也存在 – Jupiter
echo -n沒有echo換行符。或者在子進程行末尾添加.strip() – Benjamin