哪种陈述可以:
b'10.0.3.15'
转换为:
'10.0.3.15'
What does a b prefix before a python string mean?解释了' b'但不回答这个问题。
关于这个问题的工作答案当然会被投票解决。
从shell可以找到我的IP地址和复杂语句:
ip addr show eth0 | awk '$1 == "inet" {gsub(/\/.*$/, "", $2); print $2}'
(来源:Parse ifconfig to get only my IP address using Bash)
对我而言:10.0.3.15
没关系。
现在我希望在Python中执行此语句或任何语句。因为该语句具有所有类型的特定标记,所以我只写入文件,并将文件读入变量cmd
我检查了cmd
的内容与上述声明相同。现在我在Python中执行此命令:
p = subprocess.Popen(cmd, shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)
b = p.communicate()
结果是一个元组,我只需要内容:
value = b[0]
值为b'10.0.3.15\\n'
在Format Specification Mini Language我看到' b'是一种代表二进制的类型。
我只需要'10.0.3.15'
。如何实现?
答案 0 :(得分:1)
使用out, _ = p.communicate()
。然后,您的输出将保存为变量out
中的字符串。要删除\n
。您可以使用strip()
(例如out.strip()
)。
import subprocess
device = 'em1'
cmd = "ip addr show %s | awk '$1 == \"inet\" {gsub(/\/.*$/, \"\", $2); print $2}'" % device
p = subprocess.Popen(cmd, shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)
out, _ = p.communicate()
print(out.strip())
但你应该看一下Python模块netifaces。
import netifaces
device = 'em1'
print(netifaces.ifaddresses(device)[netifaces.AF_INET])
这将输出如下内容:
[{'broadcast': '192.168.23.255', 'netmask': '255.255.255.0', 'addr': '192.168.23.110'}]