栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

node.js shell命令执行

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

node.js shell命令执行

这里需要解决三个问题:

首先
,您期望异步使用stdout时出现同步行为。

run_cmd
函数中的所有调用都是异步的,因此无论是否已从stdout读取部分,全部或没有数据,它都会生成子进程并立即返回。因此,当您跑步时

console.log(foo.stdout);

您会得到当前存储在foo.stdout中的所有信息,并且无法保证会发生什么,因为您的子进程可能仍在运行。

其次
是stdout是可读流,因此1)可以多次调用数据事件,以及2)给回调函数提供缓冲区,而不是字符串。易于补救;只是改变

foo = new run_cmd(    'netstat.exe', ['-an'], function (me, data){me.stdout=data;});

进入

foo = new run_cmd(    'netstat.exe', ['-an'], function (me, buffer){me.stdout+=buffer.toString();});

这样我们就可以将缓冲区转换为字符串并将该字符串附加到我们的stdout变量中。

第三点 是,您只有在收到’end’事件时才能知道已收到所有输出,这意味着我们需要另一个侦听器和回调:

function run_cmd(cmd, args, cb, end) {    // ...    child.stdout.on('end', end);}

因此,您的最终结果是:

function run_cmd(cmd, args, cb, end) {    var spawn = require('child_process').spawn,        child = spawn(cmd, args),        me = this;    child.stdout.on('data', function (buffer) { cb(me, buffer) });    child.stdout.on('end', end);}// Run C:WindowsSystem32netstat.exe -anvar foo = new run_cmd(    'netstat.exe', ['-an'],    function (me, buffer) { me.stdout += buffer.toString() },    function () { console.log(foo.stdout) });


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/436447.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号