繁体   English   中英

stdout stdin 节点到 python

[英]stdout stdin node to python

我正在尝试学习如何使用标准输入和标准输出在节点和 Python 之间来回传递数据。

这是节点app.js调用 Python 文件test.py超级简单的骨头。

应用程序.js

const spawn = require("child_process").spawn;


const pythonProcess = spawn('python3',["test.py"]);
pythonProcess.stdout.on('data', (data) => {
    
    
    mystr = data.toString();
    myjson = JSON.parse(mystr);
    console.log(myjson.Data);
    
});

测试文件

import sys,json

data = {"devices":{
    "boiler":{
    "address":"12345:2",
    "object_type":"analogInput",
    "object_instance":"2"
    },
    "cooling_plant":{
    "address":"12345:2",
    "object_type":"analogInput",
    "object_instance":"2"
    },
    "air_handler_1":{
    "address":"12345:2",
    "object_type":"analogInput",
    "object_instance":"2"
    },
    "air_handler_2":{
    "address":"12345:2",
    "object_type":"analogInput",
    "object_instance":"2"
    },
    "hot_water_valve_1":{
    "address":"12345:2",
    "object_type":"analogInput",
    "object_instance":"2"
    }
}}

resp = {

    "Response": "Success",
    "Message": "from Python string",
    "Data": data

}

print(json.dumps(resp))
sys.stdout.flush()

当我运行$ node app我可以在控制台中看到来自 python 脚本的 json 数据。

在这里零智慧旁边,我的问题是是否可以使用一个函数来保持“正在运行”的 python 脚本,其中我可以通过 stdin 和 stdout 将数据从节点传递到正在运行的 Python 脚本函数?

这似乎正是 npm 包python-shell可以从 page 执行的操作

谁能给我一些关于如何传递这样的字符串的建议:

    "12345:2 analogInput 2"

并让 Python 脚本通过使用“python-shell”的函数返回与 json 相同的字符串?

这是一个稍微简单的问题的答案 - 我们会看看这是否有帮助。 它让 python 进程运行,并从 python 脚本发送消息和接收消息。 如果我离题了,请随意投反对票:

应用程序.js:

const spawn = require("child_process").spawn;


const pythonProcess = spawn('python3',["-u", "test.py"]);
pythonProcess.stdout.on('data', (data) => {
  console.log("PYTHON SENT:", data.toString());
});

let count = 0;

setInterval(function() {
  pythonProcess.stdin.write(`12345:2 analogInput ${count++}\n`);
}, 1000);

测试文件

import sys

print("READY")

for line in sys.stdin:
    print("PYTHON RECEIVED: %s" % line.strip())

这是发生的事情

$ node app.js 
PYTHON SENT: READY

PYTHON SENT: PYTHON RECEIVED: 12345:2 analogInput 0

PYTHON SENT: PYTHON RECEIVED: 12345:2 analogInput 1

PYTHON SENT: PYTHON RECEIVED: 12345:2 analogInput 2

PYTHON SENT: PYTHON RECEIVED: 12345:2 analogInput 3

我使用 python stdin 每秒向 python 进程发送消息,然后让你编写的回调每次处理输出。

要做这样的事情,你通常需要 python 参数-u否则它会缓冲输出,所以在你退出之前你不会看到任何东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM