使用split()和subprocess.check_output()

时间:2014-03-25 07:29:04

标签: python-3.x unicode subprocess

我试图获取upower -d(shell命令)的输出并使用.split()将其拆分为长列表,以便可以搜索它。

当我这样做时

import subprocess
dump = subprocess.check_output(["upower", "-d"])
print(dump.split())

它将按照预期的列表形式打印输出,除了列表中的每个元素前面都有" b" (不在字符串内)。

当我在python 2.7中做同样的事情时,它给了我期望的输出但是我希望它在python 3中。

2 个答案:

答案 0 :(得分:5)

b""是Python中的bytes字面值。在Python 2.7中,""也是一个字节串。 print(your_list)打印每个项目的表示(repr),这就是您在Python 3中看到b""但在Python 2中看不到的原因。

subprocess.check_output()返回Python 2和3中的字节,除非在Python 3中指定使用universal_newlines=True解码字节的locale.getpreferredencoding(False)

from subprocess import check_output

output = check_output(["upower", "-d"], universal_newlines=True)
print(output.split())

答案 1 :(得分:1)

您也可以使用dump.decode()。split()。

解码会将字节转换为str,然后您可以像以前一样使用拆分。