检索标准输出到variables

我试图在下一个代码中运行subprocess:

run = function (cmd, callback) { var spawn = require('child_process').spawn; var command = spawn(cmd); var result = ''; command.stdout.on('data', function (data) { result += data.toString(); }); command.on('exit', function () { callback(result); }); } execQuery = function (cmd) { var result = { errnum: 0, error: 'No errors.', body: '' }; run(cmd, function (message) { result.body = message; console.log(message); }); return result; } 

执行execQuery('ls') result.body始终为空,但是console.log包含值。

我运行了一个快速testing,命令的exit事件在所有stdout数据被排空之前触发。 我至less得到了捕获和输出的输出,如果我改变你的exit处理程序来查找command.stdoutend事件。

 command.stdout.on('end', function () { callback(result); }); 

这应该有所帮助。 请注意,您可能希望为此使用现有的库,并且真正正确的实现将比您拥有的要多得多,但是我的更改应该解决您当前的障碍问题。

随机提示:总是为一个错误保留callback函数的第一个参数并且您的代码片段与该约定不一致是节点约定。 您可能应该调整以符合惯例。

哦,对不起,让我解决你关于result.body的问题。 runfunction是asynchronous! 这意味着你的return result; 一行代码在runcallback主体之前执行,其中result.body = message; 是。 如果涉及到I / O,则无法在节点中的任何位置使用返回值。 你必须使用callback。