nodejs shell 调用_node.js shell命令执行

我仍在尝试掌握如何运行linux或Windows shell命令并在node.js中捕获输出的细节。最终,我想做这样的事情...

//pseudocode

output = run_command(cmd, args)

重要的一点是output必须对全局范围的变量(或对象)可用。我尝试了以下功能,但是由于某种原因,我被undefined打印到控制台了。

function run_cmd(cmd, args, cb) {

var spawn = require('child_process').spawn

var child = spawn(cmd, args);

var me = this;

child.stdout.on('data', function(me, data) {

cb(me, data);

});

}

foo = new run_cmd('dir', ['/B'], function (me, data){me.stdout=data;});

console.log(foo.stdout);  // yields "undefined"

我很难理解代码在哪里突破了...该模型的非常简单的原型可以工作...

function try_this(cmd, cb) {

var me = this;

cb(me, cmd)

}

bar = new try_this('guacamole', function (me, cmd){me.output=cmd;})

console.log(bar.output); // yields "guacamole"

有人可以帮助我了解为什么try_this()有效,但是run_cmd()无效吗?FWIW,我需要使用child_process.spawn,因为child_process.exec缓冲区限制为200KB。

最终决议

我接受詹姆斯·怀特的回答,但这是对我有用的确切代码...

function cmd_exec(cmd, args, cb_stdout, cb_end) {

var spawn = require('child_process').spawn,

child = spawn(cmd, args),

me = this;

me.exit = 0;  // Send a cb to set 1 when cmd exits

me.stdout = "";

child.stdout.on('data', function (data) { cb_stdout(me, data) });

child.stdout.on('end', function () { cb_end(me) });

}

foo = new cmd_exec('netstat', ['-rn'],

function (me, data) {me.stdout += data.toString();},

function (me) {me.exit = 1;}

);

function log_console() {

console.log(foo.stdout);

}

setTimeout(

// wait 0.25 seconds and print the output

log_console,

250);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值