我试图将输出转换为变量,我在线阅读以使用子流程模块。
我尝试过:
#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
一样吗?
谢谢
答案 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())