我有使用Python编写的自定义命令行,该命令行使用“ print”语句打印其输出。我通过生成一个子进程并使用 child.stdin.write 方法向其发送命令来从Node.js使用它。来源:
var childProcess = require('child_process'), spawn = childProcess.spawn; var child = spawn('./custom_cli', ['argument_1', 'argument_2']); child.stdout.on('data', function (d) { console.log('out: ' + d); }); child.stderr.on('data', function (d) { console.log('err: ' + d); }); //execute first command after 1sec setTimeout(function () { child.stdin.write('some_command' + '\n'); }, 1000); //execute "quit" command after 2sec //to terminate the command line setTimeout(function () { child.stdin.write('quit' + '\n'); }, 2000);
现在的问题是我没有以流动模式接收输出。我希望在打印子进程后立即获得它的输出,但是仅当子进程终止时(使用自定义cli的 quit 命令),我才接收所有命令的输出。
您需要在子进程中刷新输出。
可能您认为这不是必需的,因为在终端上进行测试并让输出发生时,库会自行刷新(例如,当一行完成时)。当打印到管道上时(由于性能原因),不会执行此操作。
冲洗自己:
#!/usr/bin/env python import sys, time while True: print "foo" sys.stdout.flush() time.sleep(2)