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

标签 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 来解决这个问题,或者我是否受到制作这个可执行文件的人的摆布?

最佳答案

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/

相关文章:

javascript - Node js在查询记录时自动将MySQL中的GMT格式日期转换为本地格式

node.js - 如何使用 NodeJS 检索 MongoDB 中特定的查询数组集合

node.js - 如何在 TypeScript 中增加 process.env?

javascript - Node.js:Express.js 设置保持事件状态

javascript - 我可以使用一些脚本来使我的 mongoose 数据库部署更加简化吗?

python - 无法连接到 Cosmos 以使用 Python 或 Node.js 客户端查询 Hive

javascript - Node.js 异步用例

javascript - Node.js path.join 的参数必须是字符串,但参数是路径

javascript - Nodejs Addon - 将正则表达式字符串传递给 C++

javascript - 如何处理查询中的数组值?