如何让x86_64架构Python的subprocess.run以arm64运行外部程序?
解决方案:在x86_64架构Python中启动arm64外部程序
以下是两种可行的解决办法:
方法一:用arch命令强制指定架构启动
直接在subprocess.run的命令列表开头加上arch -arm64,强制系统以arm64架构执行目标程序,不受父进程(x86_64 Python)的架构影响。示例代码:
import subprocess # 替换为你的外部程序路径及参数 subprocess.run(["arch", "-arm64", "/path/to/your/arm64-program", "param1", "param2"])
方法二:通过shell脚本封装启动逻辑
如果需要复用启动逻辑,可以写一个shell脚本封装架构指定操作:
- 创建名为
run_arm64.sh的脚本,内容如下:
#!/bin/bash # 替换为你的外部程序路径 arch -arm64 /path/to/your/arm64-program "$@"
- 给脚本添加执行权限:
chmod +x run_arm64.sh
- 在Python中调用该脚本:
import subprocess # 传递参数给脚本 subprocess.run(["./run_arm64.sh", "param1", "param2"])
补充说明
- 若目标程序是通用二进制(同时包含x86_64和arm64架构),
arch -arm64会优先调用arm64版本;若仅存在arm64版本,该命令也能确保程序以原生架构运行,不会通过Rosetta转译。 - 可以通过
platform.machine()在Python中确认当前进程架构,输出x86_64则说明处于Rosetta转译环境。
内容的提问来源于stack exchange,提问作者Dinari
相关产品推荐
相关产品推荐

