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

如何在Node.js中向Python脚本传递并使用options参数?

解决Node.js通过PythonShell传递参数给Python异步脚本的问题

Node.js端参数传递调整

PythonShell主要通过两种方式给Python脚本传参:命令行参数(args)或标准输入(stdin),以下是两种方式的具体实现:

方式1:命令行参数传递

把id作为命令行参数传入,修改你的Node.js代码:

const { PythonShell } = require('python-shell');

// 配置脚本路径和参数
const options = {
  scriptPath: '../', // 指向session1.py所在的上级目录
  args: ['--id', '12345'] // 以"--参数名 值"的格式传递id
};

PythonShell.run('session1.py', options, (err, results) => {
  if (err) throw err;
  console.log('Python脚本输出:', results);
});

方式2:标准输入传递JSON

如果需要传递复杂对象,推荐用stdin发送JSON:

const { PythonShell } = require('python-shell');

const pyshell = new PythonShell('../session1.py');

// 发送包含id的JSON数据
pyshell.send(JSON.stringify({ id: '12345' }));

// 监听Python脚本的输出
pyshell.on('message', (message) => {
  console.log('Python返回内容:', message);
});

// 处理脚本结束事件
pyshell.end((err) => {
  if (err) throw err;
  console.log('脚本执行完成');
});

Python端参数接收与处理

针对异步main函数,对应上面两种传参方式,分别实现参数接收:

对应命令行参数的接收

用argparse模块解析命令行参数,在异步main中直接使用:

import argparse
import asyncio

async def main():
    # 解析命令行参数
    parser = argparse.ArgumentParser()
    parser.add_argument('--id', required=True, help='从Node.js传入的ID')
    args = parser.parse_args()
    
    # 使用拿到的id参数
    print(f"成功获取ID: {args.id}")
    # 你的其他异步业务逻辑
    print("脚本其他输出内容")

if __name__ == "__main__":
    asyncio.run(main())

对应标准输入的JSON接收

从sys.stdin读取传入的JSON数据,解析后获取id:

import sys
import json
import asyncio

async def main():
    # 读取stdin中的数据并解析为JSON
    input_json = sys.stdin.read()
    params = json.loads(input_json)
    id_value = params.get('id')
    
    # 使用id参数
    print(f"成功获取ID: {id_value}")
    # 你的其他异步业务逻辑
    print("脚本其他输出内容")

if __name__ == "__main__":
    asyncio.run(main())

这样修改后,Node.js打印的results就能看到Python脚本使用传入的id后的输出了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 01:31:02