白日放歌须纵酒,青春作伴好还乡。这篇文章主要讲述python3调用cmd执行命令报乱码问题相关的知识,希望能为你提供帮助。
一、场景
python执行cmd命名调用jar包(自己封装的)执行下载Linux服务器文件到windows本地目录
cmd=java -jar javaBot.jar download 10.182.X.X username password /home/jtapp/test.txtD:\\目录\\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执行命令报乱码问题】
推荐阅读
- 我的Linux,我做主!IT技术专家带你飞--银河麒麟 kylin server v10上创建虚拟机-戴尔R720
- Redis(开发与运维):01---Redis简介特性使用场景使用建议历史版本
- Linux 内核 内存管理虚拟地址空间布局架构 ① ( 虚拟地址空间布局架构 | 用户虚拟地址空间划分 )
- Redis(开发与运维):03---Windows下安装Redis数据库
- Cluster介绍(集群) DRS介绍(分布式资源调度)EVC技术介绍
- Linux 内核 内存管理内存管理架构 ③ ( Linux 内核中的内存管理模块 | 页分配器 | 不连续页分配器 | 内存控制组 | 硬件设备内存管理 | MMU | 页表缓存 | 高速缓
- Redis(开发与运维):06---键的基本命令(KEYSSCANEXISTSRENAMEDELRANDOMKEYTYPEDBSIZE)
- N62-7
- Linux 内核 内存管理虚拟地址空间布局架构 ④ ( 内存描述符 mm_struct 结构体成员分析 | hiwater_rss | start_code | start_brk )