如何从python子进程的输出中剥离和删除特殊字符

问题描述

我正在使用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())

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...