双向节点/ python通信

时间:2015-03-07 16:47:48

标签: python node.js ipc

我试图在节点和衍生的Python进程之间实现简单的双向通信。

的Python:

import sys
for l in sys.stdin:
    print "got: %s" % l

节点:

var spawn = require('child_process').spawn;

var child = spawn('python', ['-u', 'ipc.py']);
child.stdout.on('data', function(data){console.log("stdout: " + data)});

var i = 0;
setInterval(function(){
    console.log(i);
    child.stdin.write("i = " + i++ + "\n");
}, 1000);

在Python上使用-u会强制使用无缓冲的I / O,因此我希望看到输出(我也尝试sys.stdout.flush()),但不要这样做。我知道我可以使用child.stdout.end()但这会阻止我以后写数据。

1 个答案:

答案 0 :(得分:1)

您的Python代码在行

处与TypeError: not all arguments converted during string formatting崩溃
print "got: " % l

你应该写

print "got: %s" % l

您可以通过以下方式查看Python输出的错误:

var child = spawn('python', ['-u', 'ipc.py'],
    { stdio: [ 'pipe', 'pipe', 2 ] });
Node.js上的

,即只管道标准输出,但让标准错误转到Node的stderr。


即使使用这些修补程序,甚至还要考虑-u sys.stdin.__iter__ will be buffered。要解决此问题,请改为使用.readline

for line in iter(sys.stdin.readline, ''):
    print "got: %s" % line
    sys.stdout.flush()