我有以下代码来启动 .bat 文件并读取进程的输出:
def WriteFirmwareButtonEvent(self):
self.process = QProcess(self)
self.process.setProcessChannelMode(QProcess.MergedChannels)
self.process.readyReadStandardOutput.connect(self.EventDataForReadFromCMD)
self.process.start("run.bat")
def EventDataForReadFromCMD(self):
...
我已经尝试过:
...
output = bytearray(self.process.readAllStandardOutput())
output = output.decode(xxx)
print (output)
但是任何编码都会给我关于解码第四个字符的错误 所以我尝试了纯转换为Python字符串:
...
output = str(self.process.readAllStandardOutput())
print (output)
会给我:
b'Syst\x82m nem\x85\xa7e nal\x82zt uvedenou cestu.\r\n'
...
output = QByteArray(self.process.readAllStandardOutput())
test = QTextCodec.codecForLocale()
test = test.toUnicode(output)
编码时遇到同样的问题未知字符 4
但是如果我从 CMD 输出手动运行脚本应该如下所示:
Systém nemůže nalézt uvedenou cestu.
QProcess 的输出有一些特殊的编码吗?以及他的阅读方法?
我现在唯一能做的就是为每个未知字符定义我自己的编码循环,我希望有更好的解决方案。
最佳答案
好吧,我找到了答案...
...
output = bytearray(self.process.readAllStandardOutput())
output = output.decode(self.GetCMD_Encoding())
print (output)
def GetCMD_Encoding(self):
CMD = QProcess(self)
CMD.setProcessChannelMode(QProcess.MergedChannels)
CMD.start("C:\Windows\System32\chcp.com")
CMD.waitForReadyRead()
output = bytearray(CMD.readAllStandardOutput())
output = output.decode("ascii")
output = output[18:]
return "cp" + output
输出:
Systém nemůže nalézt uvedenou cestu.
关于python - Pyqt - QProcess/readAllStandardOutput() - 编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41761132/