gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 04:32:17 27 4
gpt4 key购买 nike

同步子进程调用 are now available在正在开发的 Node.js 版本中(即不稳定)。这对于编写 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 实现:>catcdchmod, cp, dirs, echo, env, exec, 退出查找greplnlsmkdir, mv, popd, pushd, pwd, rm, >sed测试哪个。它还提供了一些自己的有用函数: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
  • 执照:NYSL

优点

  • 无依赖性。

缺点

  • 内部正字法不一致。
  • 安装需要 C++ 编译器。
  • 文档是日文的(无可否认,这对每个人来说都不是“骗局”)。
  • 无法区分被调用的可执行文件到 stderr 的输出和它到 stdout 的输出。
  • 受抚养人人数较少,因此在 Node.js 社区中可能不太根深蒂固。

关于javascript - 同步子进程调用 Node.js 0.10.x 中的 shell 脚本(包括 CLI),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25320047/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com