在 JavaScript 中调用 Python 脚本主要有两种方法:直接调用(通过 Node.js 环境)和间接调用(通过 Web 服务)。以下是具体实现方式及注意事项:
方法一:直接调用 Python 脚本1. 使用 PythonShell 库- 安装:通过 npm 安装 python-shell:npm install python-shell
- 代码示例:const PythonShell = require('python-shell');const options = { scriptPath: './path/to/scripts/', // Python 脚本所在目录 args: ['arg1', 'arg2'] // 传递参数(可选)};PythonShell.run('script.py', options, (err, results) => { if (err) throw err; console.log('Python 脚本输出:', results);});
- 特点:
适合简单的脚本调用,支持同步/异步执行。
自动处理输入/输出流,结果以数组形式返回。
2. 使用 Node.js 的 child_process 模块方法二:间接调用(通过 Web 服务)1. 创建 Python Web 服务- 使用 Flask 示例:from flask import Flask, jsonifyapp = Flask(__name__)@app.route('/run-script', methods=['GET'])def run_script(): result = {"output": "Hello from Python!"} return jsonify(result)if __name__ == '__main__': app.run(port=5000)
- 启动服务:python app.py
2. 在 JavaScript 中通过 Fetch API 调用注意事项环境依赖:
直接调用需确保系统已安装 Python 并添加到 PATH。
Web 服务需保持运行,且端口未被占用。
数据格式:
Python 脚本的输出建议为 JSON 或字符串,便于 JavaScript 解析。
示例(Python 返回 JSON):import jsonprint(json.dumps({"key": "value"}))
错误处理:
直接调用时捕获 stderr 或 PythonShell 的错误事件。
Web 服务需返回 HTTP 状态码(如 500 表示脚本执行失败)。
性能与安全:
频繁调用时,Web 服务可能成为瓶颈,需考虑缓存或异步队列。
避免直接拼接用户输入到命令行参数(防止命令注入)。
总结- 简单场景:优先用 PythonShell 或 child_process 直接调用。
- 复杂/跨平台场景:通过 Web 服务(如 Flask)解耦,用 Fetch API 交互。
- 根据实际需求选择方法,并确保环境配置和数据格式兼容。