将stdout检索到变量

时间:2013-05-29 03:51:02

标签: node.js variables process stdout output

我正在尝试在下一个代码中运行子进程:

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 包含值。

1 个答案:

答案 0 :(得分:1)

我运行了一个快速测试,命令的exit事件在所有stdout数据耗尽之前就开始了。如果我更改exit处理程序以查找command.stdout的{​​{1}}事件,我至少会抓取并打印输出。

end

这应该有所帮助。请注意,您可能希望使用现有的库,并且真正正确的实现将比您拥有的更复杂,但我的更改应该解决您当前的包版问题。

随机提示:始终为错误保留回调函数的第一个参数是节点约定,并且您的代码段与该约定不一致。您可能应该调整以匹配约定。

对不起,让我谈谈你关于command.stdout.on('end', function () { callback(result); }); 的问题。 result.body函数是异步的!这意味着您的run代码行会在return result;所在的run回调主体之前执行。当您涉及I / O时,不能在节点中的任何位置使用类似返回值。你必须使用回调。