python - Pyqt - QProcess/readAllStandardOutput() - 编码?

标签 python string qt python-3.x pyqt5

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

相关文章:

python - 如果 Python dict 理解覆盖了键,则引发错误

python - 为什么我无法从图像中去除西红柿的红色?

r - 如何将一个字符串列分隔成多个列?

c++ - 增加Qt中文本和复选框之间的空间

c++ - Qt "no matching function for call"

c++ - 鼠标悬停在 QGraphicsPixmapItem 上后 Qt 显示工具提示

python - 不同概率的随机抽样

python - 把一行拆分成一个字典,里面有多层键值对

c++ - 为什么转换不起作用?

c++ - 删除重复字符