我有以下代码来启动.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)
但是任何编码都会给我带来有关解码第4个字符的错误 所以我尝试了纯转换为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émnemůženaléztuvedenoucestu。
是否有一些来自QProcess的特殊输出编码?和他的阅读方法?
我现在唯一可以做的就是为每个未知角色定义我自己的编码循环,我希望有更好的解决方案。
答案 0 :(得分:0)
好的,我找到了答案......
...
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émnemůženaléztuvedenoucestu。
答案 1 :(得分:0)
Python有一个名为mbcs
的编解码器,该编解码器将根据当前的ANSI代码页解码文本,该代码页应完全满足您的要求:
output = output.decode('mbcs')