我正在使用 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 来解决这个问题,或者我是否受到制作这个可执行文件的人的摆布?
最佳答案
The ReadKey method reads from the keyboard even if the standard input is redirected to a file with the SetIn method.
你已经明白了。它使用硬件 Controller /HAL 的 native 绑定(bind),而不是 shell 来处理 stdio。
关于node.js STDIN 与 process.stdin 一起使用,而不是在管道传输时使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21837937/