python3调用cmd执行命令报乱码问题

Posted cuihuayu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python3调用cmd执行命令报乱码问题相关的知识,希望对你有一定的参考价值。

一、场景

python执行cmd命名调用jar包(自己封装的)执行下载Linux服务器文件到windows本地目录

cmd=java -jar javaBot.jar download 10.182.X.X username password /home/jtapp/test.txt  D:\\目录\\20220410\\test\\
result = os.popen(cmd).read()

二、报错内容

UnicodeDecodeError: utf-8 codec cant decode byte 0xce in position 0: inva

三、解决方案

def cmdNoErrorCode(cmd): #解决调用os.popen执行带有中文的cmd命令乱码问题    
with os.popen(cmd) as fp:
bf = fp._stream.buffer.read()
try:
result = bf.decode().strip()
except UnicodeDecodeError:
result = bf.decode(gbk).strip()
return result

调用方法:

result = os.popen(cmd).read()改为result = cmdNoErrorCode(cmd)

四、原因分析

cmd命令里带有中文,python程序使用utf-8去解码这些中文,但是解码失败,需要使用gbk解码。


以上是关于python3调用cmd执行命令报乱码问题的主要内容,如果未能解决你的问题,请参考以下文章

BAT/CMD中将命令执行结果赋值给变量

在cmd 中执行perl脚本报错 Unrecognized character

python调用cmd显示中文乱码

Phantomjs 在cmd命令行显示中文乱码

cmd命令行中logcat输出日志中文乱码

python 用IDLE能运行 用shell不能运行