双向 node/python 通信

Bidrectional node/python communication

我正在尝试在节点和生成的 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() 但这会阻止我稍后写入数据。

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