Pyqt - QProcess / readAllStandardOutput() - 编码?

2024-10-02 00:28:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下代码来启动.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):
    ...

我试过:

^{pr2}$

但有没有任何编码给我解码第四个字符的错误 所以我尝试了纯转换为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

但如果我从命令输出手动运行脚本,应该如下所示:

Systém nemůže nalézt uvedenou cestu.

QProcess的输出是否有一些特殊的编码?他的阅读方法呢?在

我现在唯一能做的就是为每个未知字符定义我自己的编码循环,我希望有更好的解决方案。在


Tags: testself编码outputdef字符processnem
2条回答

Python有一个称为mbcs的编解码器,它根据当前的ANSI代码页对文本进行解码,该代码页应该可以完全满足您的需要:

output = output.decode('mbcs')

好吧,我找到了答案。。。在

        ...
        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.

相关问题 更多 >

    热门问题