【发布时间】:2015-02-12 00:59:28
【问题描述】:
我必须在 node.js 中运行一些交互式 shell 命令。让我们的交互式 shell 成为 $ python:
var cp = require('child_process');
var pythonChildProcess = cp.spawn('python');
pythonChildProcess.stdout.on("data", function(data) {
console.log('data successfully written!', data); // never outputs anything
});
pythonChildProcess.stdin.write('1 + 1');
pythonChildProcess.stdin.end();
这段代码不输出任何东西(但标准输出应该是2)。
但如果是这样,就会有另一个问题:如何使它具有交互性?当我打电话给pythonChildProcess.stdin.end();时,这个过程就结束了!但我只想结束stdin,写下一个stdin!
更新:
如果我可以模拟按下enter 按钮 - 我将能够以交互方式写入进程。但是在输入字符串的末尾添加\n 并没有帮助。
【问题讨论】:
-
“结束标准输入并写入下一个标准输入”?你能解释一下你的意思吗?
-
@E_net4,我想执行
$ python命令,写一些输入(例如1 + 1),“按enter”,得到一些输出(2在这种情况下),然后写另一个输入(10 + 10),再次“按enter”,得到另一个输出,然后写另一个输入等等......我将这些“输入”序列命名为“stdins”跨度> -
这些实际上是一个标准输入流,您要向其发送多行输入。
-
inheriting 父流是微不足道的。更有趣的是actual emulation of a "headless" terminal,其中stdout被捕获为字符串,字符串被传递给子进程的stdin
标签: javascript node.js shell