繁体   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