【发布时间】:2017-05-29 20:26:32
【问题描述】:
我正在运行 Windows 10,并且我有一个程序,我们称之为 program,它可以从命令行运行。运行时,它响应用户输入的命令。用户输入命令,按下返回键,程序打印响应。这个程序不是我做的,也没有源码,所以无法修改。
我想在 Node.js 中运行这个程序,并让我的 Node.js 程序充当用户,向它发送命令并获得响应。我像这样生成我的程序:
var spawn = require('child_process').spawn;
var child = spawn('program');
child.stdout.on('data', function(data) {
console.log(`stdout: ${data}`);
});
然后我尝试向它发送一个命令,例如,help。
child.stdin.write("help\n");
然后什么也没有发生。如果我手动运行程序,输入help,然后按回车键,我会得到输出。我希望 Node.js 能够像人类用户一样运行程序、发送输入并接收输出。我假设stdin.write() 会向程序发送一个命令,就好像用户在控制台中键入它一样。但是,由于程序没有响应,我认为情况并非如此。如何发送程序输入?
我见过很多类似的问题,但不幸的是,他们的作者报告为“有效”的解决方案对我不起作用。
-
Sending input data to child process in node.js
我已经看到了这个问题和答案,并尝试了其中的一切,但没有成功。我试过用
\r\n而不是\n结束命令。我也试过在写完之后添加child.stdin.end()这一行。这些都不起作用。 -
How to pass STDIN to node.js child process
这个人在他们的自我回答中说,他们让他们的工作几乎和我一样,但我的却不行。
-
Nodejs Child Process: write to stdin from an already initialised process
这个人在他们的自我回答中说,他们通过将输入写入文件然后将该文件传送到
stdin来使其工作。发送一个简单的字符串听起来过于复杂。
【问题讨论】:
-
用 vim 试试。我的意思是写这个
var child = spawn('vim');和child.stdin.write("q\n");。这应该运行vim并退出。有用吗?
标签: node.js