あなたが任意の改行をstr.rstrip
かマルタインが示唆ものを使用することができ、あなたもでの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
を
したり、独自の正規表現を使用します。あなたはAWKやgrepを必要としないという
import re
out = subprocess.check_output(["ifconfig", "en0"])
print(re.search('([0-9]{1,3}[\.]){3}[0-9]{1,3}', out).group())
ポイントを。
ipv4またはipv6にマッチさせ、エラーが返されたときにキャッチする場合は、CalledProcessError
をキャッチして、0以外の終了ステータスにすることができます。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はエコー改行を持ちません。または、サブプロセス行の末尾に.strip()を追加してください。 – Benjamin