[英]stdout stdin node to python
我正在尝试学习如何使用标准输入和标准输出在节点和 Python 之间来回传递数据。
这是节点app.js
调用 Python 文件test.py
超级简单的骨头。
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.