从Python返回数据到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。

我想通过使用stdout.on()来打印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(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。 你应该再次检查缩进,然后在你的terminal中运行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都redirect到父进程,以帮助您快速识别错误:

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

由于系统被弃用,我们可以使用util。 请使用utilfind修改的代码

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()