簡體   English   中英

將數據從Python返回到node.js

[英]Returning data from Python to node.js

我一直在關注一些我發現從Node調用Python腳本的例子。 我能夠執行腳本,但我不能從Python返回數據。

test.js

var sys   = require('sys'),
    spawn = require('child_process').spawn,
    dummy  = spawn('python', ['test.py']);

dummy.stdout.on('data', function (data) {
sys.print("testing...\n");
sys.print(data);
});

test.py

import time
def dummy() :
    out = '';
    for i in range(0,10) :
        out += str(i + 1) + "\n"
        time.sleep(0.1)
    print out
    return out
if __name__ =='__main__' :
    dummy = dummy()

有人可以提供一個如何將結果從test.py返回到test.js的示例嗎?

謝謝。

注意:test.py已編輯為正確的縮進。

我想出了如何做到這一點,通過在Python中打印數據,並使用stdout.on()“監聽”節點中的打印。

test.js

var sys   = require('sys'),
    spawn = require('child_process').spawn,
    dummy  = spawn('python', ['test.py']);

dummy.stdout.on('data', function(data) {
    sys.print(data.toString());
});

test.py

import time
def dummy() :
    out = '';
    for i in range(0,10) :
        out += str(i + 1) + ", "
        time.sleep(0.1)
    print out
if __name__ =='__main__' :
    dummy = dummy()

我認為你的test.py有bug。 您應該再次檢查縮進,然后在終端中運行python test.py以查看它是否打印1到10:

import time
def dummy() :
  out = '';
  for i in range(0,10) :
    out += str(i + 1) + "\n"
    time.sleep(0.1)
  print out
  return out

if __name__ =='__main__' :
    dummy = dummy()

您應該將stdout,stderr重定向到父進程,以幫助您快速識別錯誤:

var spawn = require('child_process').spawn,
var dummy  = spawn('python', ['test.py']);

dummy.stdout.pipe(process.stdout);
dummy.stderr.pipe(process.stderr);

由於Sys已被棄用,我們可以使用util。 請使用util查找修改后的代碼

test.js

var sys   = require('util'),
    spawn = require('child_process').spawn,
    dummy  = spawn('python', ['test.py']);

dummy.stdout.on('data', function(data) {
    console.log(data.toString());
});

test.py

import time
def dummy() :
    out = '';
    for i in range(0,10) :
        out += str(i + 1) + ", "
        time.sleep(0.1)
    print out
if __name__ =='__main__' :
    dummy = dummy()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM