编程学习网 > 编程语言 > Python > 使用 Python 调用本地 exe 程序的方案实现
2026
07-28

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


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

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

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

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

1. 明确指定编码格式(推荐)
在调用 subprocess.run  subprocess.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 sysencoding = "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 localexe = local["your_exe.exe"]# 使用管道或组合命令,自动处理编码result = exe["中文参数"]()print(result)

总结建议

如果是偶发的乱码问题,建议优先通过给 subprocess 加上 encoding="utf-8"  encoding="gbk" 来解决,这通常能解决 90% 以上的 Windows 乱码问题。

如果是频繁进行复杂的命令行调用,或者需要构建复杂的命令管道,推荐引入 plumbum  sh 库,它们能大幅提升代码的可读性和开发效率。

以上就是“使用 Python 调用本地 exe 程序的方案实现的详细内容,想要了解更多Python教程欢迎持续关注编程学习网。 

扫码二维码 获取免费视频学习资料

Python编程学习

查 看2022高级编程视频教程免费获取