将数据从Python返回到node.js

2024-09-28 20:54:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在跟踪几个从Node调用Python脚本的例子。我可以执行脚本,但不能从Python返回数据。

测试.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);
});

测试.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已编辑,以便正确缩进。


Tags: 数据pytest脚本nodedatatimesys
3条回答

我想你的test.py有漏洞。您应该再次检查缩进,然后在终端中运行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);

我通过用Python打印数据,并使用stdout.on()来“监听”print-in节点,找到了如何做到这一点。

测试.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());
});

测试.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()

由于Sys已弃用,我们可以使用util。请使用util查找修改后的代码

测试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());
});

测试.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()

相关问题 更多 >