如何在NODE-RED中将字符串、数值参数传递给Python函数并触发运行
Node-RED传参调用Python函数实现方案
1. 仪表盘参数采集配置
- 从Node-RED仪表盘组件库拖入3个组件:text input(对应字符串参数)、numeric/slider(对应数值参数)、button(对应启动按钮),三个组件绑定到同一个仪表盘分组,方便在同一页面操作
- 两个参数输入节点后分别接change节点,分别将
msg.payload赋值到flow.str_param和flow.num_param流上下文变量,实现参数调整后实时存储 - 启动按钮节点后接change节点,将
msg.payload设置为如下JSON结构:
实现点击按钮时直接打包当前最新的两个参数{ "str_val": $flowContext("str_param"), "num_val": $flowContext("num_param") } - 可在change节点后接debug节点,验证打包后的参数是否符合预期
2. 与Python侧通信方案
根据部署场景选择以下任意一种即可:
方案1:本地调用Python脚本(适合同设备部署)
- 打包参数的消息节点后接exec节点,配置命令为:
字符串参数加双引号避免带空格时解析错误python3 /绝对路径/你的自定义脚本.py "{{payload.str_val}}" {{payload.num_val}} - Python侧脚本通过
sys.argv接收参数,示例代码:import sys if __name__ == "__main__": str_param = sys.argv[1] num_param = float(sys.argv[2]) # 此处编写你的自定义业务逻辑 print(f"执行完成,接收参数:字符串={str_param},数值={num_param}") - exec节点的输出端口可以接后续节点处理Python脚本的返回结果
方案2:HTTP接口调用(适合跨设备部署)
- Python侧用轻量框架启动HTTP服务接收参数,示例代码:
from flask import Flask, request, jsonify app = Flask(__name__) @app.route("/trigger", methods=["POST"]) def trigger_task(): params = request.get_json() str_param = params["str_val"] num_param = params["num_val"] # 此处编写你的自定义业务逻辑 return jsonify({"code": 0, "msg": "执行成功"}) if __name__ == "__main__": app.run(host="0.0.0.0", port=5678) - Node-RED侧打包参数的消息节点后接http request节点,配置请求方法为
POST,URL为http://Python运行设备IP:5678/trigger,返回格式为JSON,同时提前设置msg.headers['Content-Type'] = 'application/json'即可
3. 常见问题排查
- 用exec节点时优先写Python、脚本的绝对路径,避免环境变量、权限问题导致调用失败
- 字符串参数包含特殊字符时,可先在Node-RED侧做base64编码,Python侧接收后解码,避免解析异常
- 跨设备调用时注意Python侧设备的防火墙开放对应端口,确保网络连通
内容的提问来源于stack exchange,提问作者Andoni Izaguirre Arrieta
相关产品推荐
相关产品推荐

