同步subprocess调用Node.js 0.10.x中的shell脚本(包括CLI)

同步subprocess调用现在可用于正在开发(即不稳定)的Node.js版本。 这对编写shell脚本来说是个好消息,因为它会允许这样的代码:

var history = child_process.execSync('git log', { encoding: 'utf8' }); process.stdout.write(history); 

但是,针对当前稳定版本的Node.js(v0.10.30)的代码,除了通过外部库之外,同步subprocess调用不可用 。 两个最stream行的这样的库似乎是shelljs和exec-sync 。

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

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

shelljs

shelljs不仅仅是一个调用subprocess的库。 首先,它是几个POSIX实用程序和shell内置函数的跨平台JavaScript实现: >catcdchmodcpdirsechoenvexecexitfindgreplnlsmkdirmvpopdpushdpwdrmsedtestwhich 。 它还提供了一些有用的函数: 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 *

优点

  • 没有依赖关系。
  • 开发人员可以通过全局或本地命名空间来使用。
  • 庞大数量的依赖软件包和用户,很可能会在一段时间内继续使用。

缺点

  • 无法区分被调用的可执行文件的输出到标准输出到标准输出。 错误 ?
  • shelljs文档警告说 :“对于长寿命的进程,最好是asynchronous运行exec(),因为当前的同步实现使用了大量的CPU,这应该很快就会得到解决。

exec-sync / execSync

exec-sync已经退出,以支持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
  • 许可证:MIT

优点

  • 直接安装一次。
  • 大量的依赖软件包和用户,因此可能会继续使用一段时间。

缺点

  • 不依赖于自由。
  • 安装需要存在一个C ++编译器。
  • 无法区分被调用的可执行文件的输出到标准输出到标准输出。 错误 ?

execsync

这里值得一提,因为它很容易与任何不区分大小写的search引擎,其他algorithm或人为的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
  • 许可证:NYSL

优点

  • 没有依赖关系。

缺点

  • 内部拼写不一致。
  • 安装需要存在一个C ++编译器。
  • 文件是日文的(不是所有人都认同的)。
  • 无法区分被调用的可执行文件的输出到标准输出到标准输出。
  • less数家属,因此可能在Node.js社区中根深蒂固。