【问题标题】:can't print readAllStandardOutput correctly decoded无法打印正确解码的 readAllStandardOutput
【发布时间】:2019-11-23 21:19:18
【问题描述】:

我有这段代码可以将一个进程的所有输出打印到一个文本字段中:

data = self.m_process.readAllStandardOutput()
s = str(data)
self.m_ui.b_renderOutput.append(s)

我在输出中得到的是:

b''
b''
b''
b'\r\nStarting "C:\\Program Files'
b''
b'\\Autodesk\\Maya2018\\bin\\mayabatch.exe"\r\n'
b'Initialized VP2.0 renderer {\r\r\n'

我无法将其解码并以正确的方式打印。我知道来自 readAllStandardOutput 的是 QByteArray

【问题讨论】:

  • python2 还是 python3? PyQt5 还是 PySide2?因为您似乎正在使用 Maya,这会使用 python2 执行 PySide 或 PySide2,这会影响答案。
  • 尝试将s = str(data)更改为s = data.decode()
  • PyQt5 与 Python3。 data.decode() 给我错误 AttributeError: 'QByteArray' object has no attribute 'decode'

标签: python pyqt pyqt5 qbytearray


【解决方案1】:

如果要将QByteArray转成字符串,先用data()方法转成字节,再用decode()转成字符串:

data = self.m_process.readAllStandardOutput()
s = data.data().decode() # <---
self.m_ui.b_renderOutput.append(s)

另一种方法是将QByteArray转换为bytearray,然后使用decode()

data = self.m_process.readAllStandardOutput()
s = bytearray(data).decode() # <---
self.m_ui.b_renderOutput.append(s)

【讨论】:

  • 谢谢,这有效,现在我有一个干净的字符串。最后一件事,你知道为什么我在输出中得到随机换行符吗?像:O\n penCL evaluator 正在尝试初始化 OpenCL。 D\n 建立了 1 个 OpenCL 平台:
  • @Hyperion 不要使用 append(),因为你插入了一个额外的结束行,而是使用 insertPlainText()
猜你喜欢
  • 1970-01-01
  • 2012-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-27
  • 1970-01-01
相关资源
最近更新 更多