stdout stdin 节点到 python
stdout stdin node to python
我正在尝试学习如何使用标准输入和标准输出在节点和 Python 之间来回传递数据。
这是超级简单的东西,节点 app.js
调用 Python 文件 test.py
。
app.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);
});
test.py
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 数据。
除了这里的零智慧之外,我还有一个问题,是否可以保留一个“运行ning”python 脚本,其中包含一个函数,我可以通过 stdin 和 stdout 将数据从节点传递到运行宁Python脚本函数?
这似乎正是 npm 包 python-shell
可以做的 from there page。
谁能给我一些建议,告诉我如何传递这样的字符串:
"12345:2 analogInput 2"
并使用 `python-shell' 使 Python 脚本 return 通过与 json 相同的字符串?
这是对一个稍微简单的问题的回答 - 我们会看看它是否有帮助。它离开 python 进程 运行,并发送消息并从 python 脚本接收消息。如果我离题太远,请随意投反对票:
app.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);
test.py
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
否则它会缓冲输出,所以你在退出之前看不到任何东西。
我正在尝试学习如何使用标准输入和标准输出在节点和 Python 之间来回传递数据。
这是超级简单的东西,节点 app.js
调用 Python 文件 test.py
。
app.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);
});
test.py
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 数据。
除了这里的零智慧之外,我还有一个问题,是否可以保留一个“运行ning”python 脚本,其中包含一个函数,我可以通过 stdin 和 stdout 将数据从节点传递到运行宁Python脚本函数?
这似乎正是 npm 包 python-shell
可以做的 from there page。
谁能给我一些建议,告诉我如何传递这样的字符串:
"12345:2 analogInput 2"
并使用 `python-shell' 使 Python 脚本 return 通过与 json 相同的字符串?
这是对一个稍微简单的问题的回答 - 我们会看看它是否有帮助。它离开 python 进程 运行,并发送消息并从 python 脚本接收消息。如果我离题太远,请随意投反对票:
app.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);
test.py
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
否则它会缓冲输出,所以你在退出之前看不到任何东西。