javascript – 同步子进程在Node.js 0.10.x中调用shell脚本(包括CLI)

前端之家收集整理的这篇文章主要介绍了javascript – 同步子进程在Node.js 0.10.x中调用shell脚本(包括CLI)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
同步子进程在正在开发的Node.js版本中调用 are now available(即不稳定).这对于编写shell脚本来说是个好消息,因为它允许这样的代码
var history = child_process.execSync('git log',{ encoding: 'utf8' });
process.stdout.write(history);

但是,对于针对当前稳定版本的Node.js(v0.10.30)的代码,除了通过外部库之外,同步子进程调用not available.两个最受欢迎的此类库似乎是shelljsexec-sync.

对于打算与v0.10.x一起使用的shell脚本,必须调用二进制文件或其他可执行文件并处理它们的输出,这两个库或其他类似库的相对优缺点是什么?如果合适,请提供代码示例以供说明.

解决方法

让我们看看三个选项:问题中提到的两个选项,再加上 execsync.

shelljs

shelljs不仅仅是一个用于调用子进程的库.首先,它是几个POSIX实用程序和shell内置程序的跨平台JavaScript实现:>,cat,cd,chmod,cp,dirs,echo,env,exec,exit,find,grep,ln,ls,mkdir,mv,popd,pushd,pwd,rm,sed,test,which.它还提供了一些有用的函数:error()和tempdir().

其exec函数可用于同步运行外部可执行文件.

语法示例

使用全局命名空间

require('shelljs/global');
var version = exec('node --version',{silent:true}).output;
console.log('version ' + version);

或者,使用本地命名空间:

var sh = require('shelljs');
var version = sh.exec('node --version',{silent:true}).output;
console.log('version ' + version);

主要统计数据/规格

>依赖关系:0
>家属:411
>本月下载:957851
>许可证:BSD *

优点

>没有依赖.
>可由开发人员自行决定通过全局或本地命名空间使用.
>大量的依赖包和用户,因此可能会在一段时间内保持使用状态.

缺点

>无法将被调用的可执行文件输出与stderr从其输出区分为stdout. Bug
> shelljs文档warns,“对于长期存在的进程,最好以异步方式运行exec(),因为当前的同步实现使用了大量的cpu.这应该很快得到解决.”

exec-sync/execSync

exec-sync retired赞成execSync.因此本节的其余部分涉及后者.

execSync库包含一个围绕C核的JavaScript包装器.在安装execSync期间,C内核被编译为适合平台的NodeJS二进制模块.

语法示例

var sh = require('execSync');
var version = sh.exec('node --version').stdout;
console.log('version ' + version);

主要统计数据/规格

>依赖关系:1
>家属:91
>本月下载:20525
>许可证:麻省理工学院

优点

>一旦安装就直截了当.
>大量依赖包和用户,因此可能会在一段时间内保持使用状态.

缺点

>不依赖于自由.
>安装需要存在C编译器.
>无法将被调用的可执行文件输出与stderr从其输出区分为stdout. Bug

execsync

值得一提的是,它很容易被execSync(见上文)与任何不区分大小写的搜索引擎,其他算法或人类混淆.令人困惑的是,execsync的作者在execsync的代码和文档中的几个点使用了拼写法“execSync”.

与上面的execSync一样,execsync库包含围绕C核的JavaScript包装器.在安装execsync期间,C内核被编译成适合平台的NodeJS二进制模块.

语法示例

var sh = require('execsync');
var version = sh('node --version');
console.log('version ' + version);

主要统计数据/规格

>依赖关系:0
>家属:3
>本月下载:20233
>许可证:纽约证券交易所

优点

>没有依赖.

缺点

>内部正字法不一致.>安装需要存在C编译器.>文件是日文的(不可否认,不是每个人的“骗局”).>无法将被调用的可执行文件输出与stderr从其输出区分为stdout.>少数家属,因此可能在Node.js社区中根深蒂固.

猜你在找的JavaScript相关文章