[英]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.