使用Python调用本地exe程序的实现方案

 更新时间:2026年07月24日 16:28:41   作者:学亮编程手记  
Python调用本地exe程序时参数或输出出现乱码,本文详细讲解了subprocess乱码的解决方法,包括指定encoding参数和手动解码,并推荐了两个更好用的第三方库sh和plumbum,帮你轻松解决编码不一致问题,提升开发效率,需要的朋友可以参考下

在使用 Python 调用本地 exe 程序时,参数值或输出结果出现乱码,通常是因为编码不一致导致的(例如 Windows 默认使用 GBK/CP936 编码,而你的程序或参数使用了 UTF-8)。

在考虑更换库之前,建议先尝试通过优化 subprocess 的参数来解决乱码问题。如果确实需要更高级的功能,也有一些优秀的第三方库可以替代。

一、 不换库:使用subprocess解决乱码的最佳实践

subprocess 本身是 Python 官方推荐的底层调用库,功能非常强大。你可以通过以下几种方式解决参数和输出的乱码问题:

1. 明确指定编码格式(推荐)
在调用 subprocess.runsubprocess.Popen 时,显式指定 encoding 参数,让 Python 自动帮你处理解码工作。

import subprocess

# 明确指定使用 utf-8 编码进行交互
result = subprocess.run(
    ["your_exe.exe", "中文参数"],
    capture_output=True,
    encoding="utf-8"  # 根据 exe 实际支持的编码填写,如 gbk 或 utf-8
)
print(result.stdout)

2. 手动处理字节流并解码
如果不使用 encoding 参数,subprocess 会返回 bytes 类型的数据。你可以获取字节流后,手动用正确的编码进行解码,并设置错误处理策略(防止个别非法字符导致崩溃)。

result = subprocess.run(
    ["your_exe.exe", "中文参数"],
    capture_output=True
)
# 手动解码,遇到无法解码的字符进行替换
stdout_str = result.stdout.decode("utf-8", errors="replace") 
print(stdout_str)

3. 跨平台兼容性处理
Windows 和 Linux 的默认编码不同,可以动态获取当前系统的编码:

import sys
encoding = "utf-8" if sys.platform != "win32" else "gbk"
subprocess.run(["your_exe.exe", "中文参数"], encoding=encoding)

二、 更好用的第三方库推荐

如果你觉得 subprocess 的底层 API 过于繁琐,希望有更优雅、更高级的封装,推荐以下两个库:

1.sh(原pbs)

sh 库将系统中的可执行程序直接映射为 Python 函数,调用起来极其优雅,且在处理参数传递时非常智能。

  • 优点:语法极度简洁,无需手动拆分命令字符串,自动处理参数列表。
  • 示例
import sh
# 直接像调用函数一样调用 exe,参数自动传递
output = sh.your_exe("中文参数", _encoding="utf-8")
print(output)

2.plumbum(PLUg-and-play composable shell)

这是一个专为系统编程设计的库,提供了类似 Shell 脚本的管道操作和命令行组合能力。

  • 优点:支持管道(|)、重定向(>),对 Unicode 和跨平台支持极好,异常处理完善。
  • 示例
from plumbum import local

exe = local["your_exe.exe"]
# 使用管道或组合命令,自动处理编码
result = exe["中文参数"]()
print(result)

总结建议

  • 如果是偶发的乱码问题,建议优先通过给 subprocess 加上 encoding="utf-8"encoding="gbk" 来解决,这通常能解决 90% 以上的 Windows 乱码问题。
  • 如果是频繁进行复杂的命令行调用,或者需要构建复杂的命令管道,推荐引入 plumbumsh 库,它们能大幅提升代码的可读性和开发效率。

以上就是使用Python调用本地exe程序的实现方案的详细内容,更多关于Python调用本地exe程序的资料请关注脚本之家其它相关文章!

相关文章

  • python批量从es取数据的方法(文档数超过10000)

    python批量从es取数据的方法(文档数超过10000)

    今天小编就为大家分享一篇python批量从es取数据的方法(文档数超过10000),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • 浅谈Python的垃圾回收机制

    浅谈Python的垃圾回收机制

    本文虽然是转载的,但是是真的好的一篇非常透彻的对Python垃圾回收机制的讲解!!!这里推荐给大家
    2016-12-12
  • 如何通过命令行进入python

    如何通过命令行进入python

    在本篇文章中小编给各位分享的是一篇关于命令行进入python的方法,有需要的朋友们学习一下。
    2020-07-07
  • Python Pillow库详细介绍与代码示例

    Python Pillow库详细介绍与代码示例

    Python Pillow 库是一个强大的图像处理工具,是经典 PIL(Python Imaging Library)库的现代分支,以下是对 Pillow 库的全面讲解和完整代码示例,需要的朋友可以参考下
    2025-04-04
  • python保留两位小数的五种方法

    python保留两位小数的五种方法

    很多小伙伴在学习python的时候可能会遇到对数据进行格式化输出的需求,其中最常见的需求为:保留几位小数,今天小编就以python怎么保留两位小数为例,来介绍一下python数据格式化的方法,需要的朋友可以参考下
    2024-08-08
  • Python小白必备的8个最常用的内置函数(推荐)

    Python小白必备的8个最常用的内置函数(推荐)

    这篇文章主要介绍了Python常用的内置函数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • Python学习笔记之解析json的方法分析

    Python学习笔记之解析json的方法分析

    这篇文章主要介绍了Python解析json的方法,结合实例形式分析了常见的Python解析与转换json格式数据相关操作技巧,需要的朋友可以参考下
    2017-04-04
  • Python CSV文件模块的使用案例分析

    Python CSV文件模块的使用案例分析

    这篇文章主要介绍了Python CSV文件模块的使用,结合具体案例形式分析了Python使用csv模块操作csv文件的相关使用技巧与相关注意事项,需要的朋友可以参考下
    2019-12-12
  • 使用PyQt5设计GUI实现程序图形界面设计

    使用PyQt5设计GUI实现程序图形界面设计

    当我们学会如何在pycharm中配置pyqt5设计GU之后,那么本文来带你熟悉PyQt5设计GUI流程并为程序设计图形界面,设计一个属于自己的GUI
    2021-08-08
  • PyCharm 2020.1版安装破解注册码永久激活(激活到2089年)

    PyCharm 2020.1版安装破解注册码永久激活(激活到2089年)

    这篇文章主要介绍了PyCharm 2020.1版安装破解注册码永久激活(激活到2089年),需要的朋友可以参考下
    2020-09-09

最新评论