簡體   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