问题描述
我正在使用Python子进程执行命令,如下所示:
process = subprocess.Popen(['debug','file.tgz'],stdout=subprocess.PIPE,stderr=subprocess.PIPE)
while True:
output = process.stdout.readline()
print(str(output.strip()).encode())
return_code = process.poll()
if return_code is not None:
break
我得到的结果如下:
b"b'Registers:'"
这就是我所期望的。
Registers:
我正在使用编码,但仍然看到相同的结果。如果我在命令行上运行相同的进程,则会得到相同的预期结果。
如何删除这些特殊字符?
解决方法
- 跳过str();这将摆脱内部
b'...'
- 您想要.decode而不是.encode,因为您想将字节流(来自子进程)转换为字符串(用于打印)。您需要知道它使用的是哪种编码,以及(如果适用)如何处理格式错误的数据。
- (可选)在解码后(而不是在此之前)剥离空格,以也剥离非ASCII空格字符(如果有)。
print(output.decode('utf8',errors='strict').strip())