使用python管道的子流程

2024-03-28 08:27:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我要执行bash命令以获取默认接口:

ip route list | grep default | awk '{print $5}'

我想要这个,但在python脚本中,所以我尝试:

    cmd = "ip route list | grep default | awk '{print $5}'"
    ps = subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.STDOUT)
    output = ps.communicate()[0]
    print(output)

但是它给了我b'wlan0\n'作为答案,而不是wlan0…我还有什么其他的解决方案,或者我在哪里犯了错误?你知道吗


Tags: 命令ip脚本cmdbashdefaultoutputroute
1条回答
网友
1楼 · 发布于 2024-03-28 08:27:41

获取b'wlan0\n'值的类型是bytes,因此需要对其进行解码。通常使用utf-8。你知道吗

str/bytes类型处理是Python2Python3之间的一大区别。这些网站包含有关它的更多详细信息:

我写了一个小例子来理解:

代码:

bytes_var = b"wlan0"
string_var = "wlan0"
print("Type: {type}, Value: {val}".format(type=type(bytes_var),
                                          val=bytes_var))
print("Type: {type}, Value: {val}".format(type=type(string_var),
                                          val=string_var))
print("Type: {type}, Value: {val}".format(type=type(bytes_var.decode("utf-8")),
                                          val=bytes_var.decode("utf-8")))

输出:

>>> python3 test.py 
Type: <class 'bytes'>, Value: b'wlan0'
Type: <class 'str'>, Value: wlan0
Type: <class 'str'>, Value: wlan0

此外,当然可以使用x.strip()删除后面的空格。你知道吗

因此,在您的情况下,您应该使用以下行:

print(output.decode("utf-8")).strip())

相关问题 更多 >