我正在使用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的问题,还是我受制于这个可执行文件的人的摆布?
答案 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。