在nodejs中,执行外部命令的唯一方法是通过sys.exec(cmd)。我想调用一个外部命令,并通过stdin给它提供数据。在nodejs中,似乎还没有打开命令然后将数据推送到其中的方法(仅执行并接收其standard + error输出),因此,看来我现在要做的唯一方法是通过单个字符串命令,例如:
var dangerStr = "bad stuff here"; sys.exec("echo '" + dangerStr + "' | somecommand");
对此类问题的大多数答案都集中在正则表达式上(不适用于nodejs(使用Google的V8 Javascript引擎)对我来说不适用)或其他语言(如Python)的本机功能。
我想逃避angersStr,以便安全地编写一个上面的exec字符串。如果有帮助,dangerStr将包含JSON数据。
有一种写外部命令的方法:process.createChildProcess(documentation)返回带有write方法的对象。createChildProcess并不是很方便,因为它不缓冲stdout和stderr,因此您将需要事件处理程序来分块读取输出。
process.createChildProcess
write
createChildProcess
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.");