Node.js调用child_process启动Python脚本时如何指定使用的Python版本
解决方案
- 方案1:直接替换调用命令
Mac系统默认将Python2的可执行文件映射为python命令,Python3的对应命令为python3,你可以直接修改spawnSync的第一个参数即可:
import { spawnSync } from 'child_process'; const write_questions = spawnSync('python3', ['src/write_questions.py', subject], {stdio: 'inherit'})
f-string是Python3.6及以上版本才支持的语法,切换到Python3后报错会自动解决。
- 方案2:指定VS Code对应Python解释器的绝对路径
如果你的设备上安装了多个Python3版本,想要精准调用VS Code里设置的3.9.6版本,可以先找到该解释器的完整可执行路径:
打开VS Code,按下快捷键Cmd+Shift+P,搜索并选择「Python: Select Interpreter」,悬停在你正在使用的Python 3.9.6(64-bit)选项上,就能看到完整路径,比如示例路径为/usr/local/bin/python3.9,直接把路径作为第一个参数传入即可:
const write_questions = spawnSync('/usr/local/bin/python3.9', ['src/write_questions.py', subject], {stdio: 'inherit'})
- 方案3:修改子进程的环境变量优先级
如果你不想硬写路径,也可以在启动子进程时调整PATH的优先级,把Python3.9的目录放到系统PATH最前面:
const write_questions = spawnSync('python', ['src/write_questions.py', subject], { stdio: 'inherit', env: { ...process.env, // 把Python3.9的bin目录替换为你本地的实际路径 PATH: `/usr/local/bin/python3.9/bin:${process.env.PATH}` } })
修改完成后可以先运行测试代码验证版本是否正确:
// 测试版本输出,把第一个参数替换为你实际用的命令/路径 spawnSync('python3', ['--version'], {stdio: 'inherit'})
内容的提问来源于stack exchange,提问作者Daggerpov
相关产品推荐
相关产品推荐

