“子流程”模块存在问题

时间:2019-05-03 14:15:13

标签: python python-3.x

我试图将输出转换为变量,我在线阅读以使用子流程模块。

我尝试过:

#coding: utf-8
import subprocess as sp
output = sp.check_output("echo test && pwd && ls", shell=True)
print(output)

但是输出是:

# python test_subprocess.py
b'test\n/data/data/com.termux/files/home\nkali-armhf\nkalinethunter\ntest_subprocess.py\ntestip.py\nwebserver\n'

(注意:我使用termux,Android上的终端模拟器)

如何将该输出“转换”为更清晰的输出? 像没有b'或没有工作\n一样吗? 谢谢

4 个答案:

答案 0 :(得分:3)

sb.check_output函数返回一个字节对象,该对象类似于字符串,但代表原始字节。要实际查看原始数据的解码版本,请使用print(output.decode())而不是仅打印输出。

您会看到当前输出,因为print函数在bytes对象上调用str,这会退回到具有尽可能多信息的表示形式。这意味着不会进行自动解码。

答案 1 :(得分:0)

基本上,我按如下方式使用它:

    data = subprocess.check_output(command, shell=True).decode('utf-8')
    data = data.replace('\\r\\n', '\n')

答案 2 :(得分:0)

您可以解码(将字节转换为str)并替换新行

print(output.decode('utf-8').replace('\\n', '\n')) 

结果:

test
/data/data/com.termux/files/home
kali-armhf
kalinethunter
test_subprocess.py
testip.py
webserver

答案 3 :(得分:0)

b'是以字节为单位的,因此您得到的输出也以字节为单位,您可以使用decode()函数对其进行解码,并且可以使用encode()返回字节。

您可以将print(output)更改为print(output.decode())