nodejs中,执行外部命令的唯一方法是通过sys.行政长官(命令).我想调用一个外部命令,并通过stdin给它提供数据.在nodejs中,似乎还没有一种方法可以打开一个命令,然后将数据推送到该命令(仅用于执行并接收其标准+错误输出),因此我现在要做的唯一方法似乎是通过一个字符串命令,例如:

var dangerStr = "bad stuff here";
sys.exec("echo '" + dangerStr + "' | somecommand");

对这类问题的大多数回答都集中在正则表达式上,正则表达式在nodejs中不适用(它使用谷歌的v8javascript引擎),或者来自其他语言(如Python)的本机特性.

我想避开dangerStr,这样就可以安全地编写一个像上面那样的exec字符串.如果有帮助,dangerStr将包含JSON数据.

推荐答案

有一种写入外部命令的方法:process.createChildProcess(documentation)使用write方法返回一个对象.createChildProcess并没有那么方便,因为它不缓冲stdout和stderr,所以需要事件处理程序来读取块中的输出.

var stdout = "", stderr = "";
var child = process.createChildProcess("someCommand");

child.addListener("output", function (data) {
    if (data !== null) {
        stdout += data;
    }
});
child.addListener("error", function (data) {
    if (data !== null) {
        stderr += data;
    }
});
child.addListener("exit", function (code) {
    if (code === 0) {
        sys.puts(stdout);
    }
    else {
        // error
    }
});

child.write("This goes to someCommand's stdin.");

Node.js相关问答推荐

在Node.js下使用PostgreSQL客户端聚合PostgreSQL中的用户定义类型

无法使用NPM安装REDUX和DATEPPICER

ForbidenError:使用Express.js的CSRF令牌无效

如何在医学中按patientId查找一个并同时插入多个数据

在函数上执行 toString 的Typescript 会产生奇怪的字符 (path_1, (0, Promise.writeFile))

密码加密的最佳实践是什么?

eSignature API 的 NodeJS SDK 是否支持数据流?

为什么它无法发送发布请求并更改为 chrome 中的获取方法?

从 Response.json() 返回的 JSON 似乎无效?

TypeError:在使用 Jest、Supertest、Express、Typescript 进行测试时无法读取未定义的属性(读取listen)

MongoDB 根据使用聚合的条件从嵌套数组中删除对象

仅显示用户在 Reactjs 中使用服务器端发布的帖子是 Node Js、Mongodb

node.js 中 res.setHeader 和 res.header 的区别

Webpack TypeScript module.hot 不存在

安装 node 包时可以使用自定义目录名称而不是node_modules吗?

如何使用 cookie 创建 HTTP 客户端请求?

node.js 找不到模块mongodb

mongoose 填充与对象嵌套

node/nodemon 中是否有对 typescript 的源映射支持?

如何修复此错误 TypeError [ERR_INVALID_CALLBACK]: Callback must be a function