我正在尝试运行一个发出Unicode输出的命令,并将该输出打印到shell。
我的代码类似于下面的代码(CP850
,因为这是我的Windows终端使用的代码页,由chcp
返回):
command = 'echo Тестирование всегда необходимо!'
p = Popen(command, shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE, universal_newlines=True)
out, err = p.communicate()
out = out.decode('CP850')
err = err.decode('CP850')
print(out)
我得到:?????????? ?????? ??????????!
我怎样才能使正确的文本通过?
2条答案
按热度按时间bfhwhh0e1#
为什么你要把这个内容解码成CP850中的内容?没有理由这样做。
同样,在Python 3上:
m0rkklqb2#
我知道这个问题已经有将近5年的历史了,但是也许这对其他使用子进程的人有用,他们被迫使用管道来捕获python中的windows命令行输出。我刚刚花了几个小时在谷歌上搜索如何改变子进程的行为,并且未能改变Windows中文本管道的编码(我试过cmd /U和chcp 65001,将COMSPEC设置为cmd /U /C &&,并且locale无效).我对cmd的了解不够,无法使furoscame的代码与echo一起工作,但是我可以使用python -c“print('...')”作为替代(这正是我测试CLI所需要的)。
我发现关键是在衍生的shell中使用Python,在它的utf8模式下。然后它直接捕获输出为原始字节而不是文本,并手动解码。
在Windows 10中使用python.org的3.11安装程序