You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python脚本中调用Tools/i18n中的msgfmt.py、pygettext工具?

在Python脚本中调用Python工具的最佳实践

优先选择「导入模块+调用主函数」,而非系统命令

像msgfmt.py和pygettext这类官方工具本质是可执行Python脚本,核心逻辑都封装在代码里。直接导入并调用它们的主函数,是跨平台最可靠的方案,能避开PATH配置、系统解释器差异这些坑。

1. 直接导入工具模块调用

这类工具通常会在脚本末尾用if __name__ == '__main__':触发主逻辑,你可以手动导入模块,模拟命令行参数后调用主函数:

示例:调用pygettext

import sys
# 把Tools/i18n的路径添加到Python搜索路径,根据实际位置调整
sys.path.append("/path/to/python/Tools/i18n")

import pygettext
# 模拟命令行参数,比如指定域和待扫描的源码文件
sys.argv = ['pygettext', '-d', 'myapp', 'src/*.py']
pygettext.main()

示例:调用msgfmt.py

import sys
sys.path.append("/path/to/python/Tools/i18n")

import msgfmt
# 模拟命令行参数,指定输入po文件和输出mo文件
sys.argv = ['msgfmt', '-o', 'myapp.mo', 'myapp.po']
msgfmt.main()

2. 处理工具仅存在于系统Python的情况

如果工具没装在当前venv里,有两种稳妥方案:

  • 指定系统Python解释器调用脚本:用subprocess(比os.system更安全可控)直接调用系统Python执行工具脚本,跨平台都适用:
import subprocess

# Windows下示例,替换成你的系统Python路径
system_python = "C:/Python39/python.exe"
tools_path = "C:/Python39/Tools/i18n/"

# 执行pygettext
subprocess.run([system_python, f"{tools_path}pygettext.py", "-d", "myapp", "src/*.py"])
# 执行msgfmt
subprocess.run([system_python, f"{tools_path}msgfmt.py", "-o", "myapp.mo", "myapp.po"])

Linux下同理,把路径换成/usr/bin/python3和对应的/usr/lib/pythonX.X/Tools/i18n/即可。

  • 复制工具脚本到项目目录:如果系统Python和当前venv版本兼容,直接把msgfmt.py和pygettext复制到项目的工具目录下,就能直接导入调用,彻底摆脱对系统环境的依赖。

3. 为什么不推荐os.system?

os.system很难捕获命令的输出和错误信息,跨平台时命令格式差异大(比如Windows的路径分隔符、解释器调用方式)。用subprocess.run()能精准控制输入输出、获取返回码,代码也更易维护。


内容的提问来源于stack exchange,提问作者MaKaNu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 20:10:32