node.js STDIN与process.stdin一起使用,而不是在管道时使用

时间:2014-02-17 19:43:05

标签: node.js

我正在使用require(“child_process”)。spawn并调用一个可执行文件,它在开始时暂停输入密码;如果我像下面这样使用它:

var spawn = require("child_process").spawn;
var exe = spawn("NameOfExe.exe", [/*arguments*/], {stdio: [process.stdin, process.stdout, process.stderr]});

它完美地运作(是的,我知道我可以继承,嘘:p)。我可以在我的控制台内输入,它会毫无疑问地接受它。

但是,如果我这样做:

var spawn = require("child_process").spawn;
var exe = spawn("NameOfExe.exe", [/*arguments*/], {stdio: ["pipe", process.stdout, process.stderr]});
exe.stdin.write("Password\n");

然后可执行文件甚至没有收到标准输入;它立即进入执行失败。

我完全不知所措。有什么建议吗?

编辑:

我想我可能会做点什么!

所以我99.99%确定可执行文件正在使用C#和Console.ReadKey来获取密码。但是,根据Microsoft,只要将In属性重定向到其他位置,就会抛出异常。

所以这解释了它,但有没有办法解决这个使用Node的问题,还是我受制于这个可执行文件的人的摆布?

1 个答案:

答案 0 :(得分:1)

The ReadKey method reads from the keyboard even if the standard input is redirected to a file with the SetIn method.

你明白了。它使用本机绑定到硬件控制器/ HAL而不是shell来处理stdio。