Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 同步子进程调用Node.js 0.10.x中的shell脚本(包括CLI)_Javascript_Node.js_Shell_Popen_Command Line Interface - Fatal编程技术网

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

Javascript 同步子进程调用Node.js 0.10.x中的shell脚本(包括CLI),javascript,node.js,shell,popen,command-line-interface,Javascript,Node.js,Shell,Popen,Command Line Interface,正在开发的Node.js版本中的同步子进程调用(即不稳定)。这对于编写shell脚本来说是一个好消息,因为它将允许这样的代码: var history = child_process.execSync('git log', { encoding: 'utf8' }); process.stdout.write(history); 但是,对于针对Node.js(v0.10.30)当前稳定版本的代码,同步子进程调用是通过外部库进行的。最流行的两个这样的库似乎是和 对于打算与v0.10.x一起使用的

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

var history = child_process.execSync('git log', { encoding: 'utf8' });
process.stdout.write(history);
但是,对于针对Node.js(v0.10.30)当前稳定版本的代码,同步子进程调用是通过外部库进行的。最流行的两个这样的库似乎是和


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

让我们看看三个选项:问题中提到的两个选项,以及

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);
或者,使用本地命名空间:

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的输出
  • shelljs文档中提到,“对于长寿命的进程,最好异步运行exec(),因为当前的同步实现使用了大量CPU。这应该很快得到解决。”
/ 我一直赞成。因此,本节其余部分涉及后者

ExcScCo库由一个围绕C++核心的JavaScript包装器组成。在安装ExcSeCc期间,C++核心被编译成一个合适的NoDEJS二进制模块平台。 语法示例 关键统计数据/规格

  • 依赖关系:1
  • 家属:91
  • 本月下载:20525
  • 执照:麻省理工学院
赞成的意见
  • 一旦安装,就很简单
  • 大量依赖软件包和用户,因此可能会在使用一段时间
欺骗
  • 不是无依赖性的
  • 安装需要有一个C++编译器。
  • 无法区分被调用的可执行文件对stderr的输出和对stdout的输出
这里值得一提,因为任何不区分大小写的搜索引擎、其他算法或人工操作都很容易将它与execSync(见上文)混淆。更让人困惑的是,execsync的作者在execsync的代码和文档中的一些地方使用了正字法“execsync”

类似ExcScReC,ExcSeCc库由一个围绕C++核心的JavaScript包装器组成。在安装ExcSeCc期间,C++核心被编译成一个合适的NoDEJS二进制模块平台。 语法示例 关键统计数据/规格

  • 依赖项:0
  • 家属:3人
  • 本月下载:20233
  • 许可证:纽约证券交易所
赞成的意见
  • 没有依赖关系
欺骗
  • 内部拼写不一致
  • 安装需要有一个C++编译器。
  • 文档是日文的(不可否认,这对每个人来说都是一个“骗局”)
  • 无法区分被调用可执行文件对stderr的输出和对stdout的输出
  • 少量依赖项,因此在Node.js社区中可能不太根深蒂固

虽然这是一个写得很好的问题,但这可能会因为过于基于观点而关闭:-/谢谢。我希望它不会被关闭,因为它看起来是非常合适的:本质上是一种改进。但是,如果您认为我应该将其标记为迁移到softwarerecs.stackexchange.com或类似的网站,我不知道这两者是否都是。好吧,我不是在征求意见,我是在询问两种精确指定的替代编程策略的具体优缺点(在本例中,使用一个库与使用另一个库来完成相同的任务)。此类问题多年来一直在SO上被问和回答。在任何情况下,on SO/SE:+1都有自己回答这个问题的空间。您甚至可以从问题中删除特定的包,使其更具开放性:-)谢谢:-)我在问题中添加了文本“或其他类似的库”。为什么我们需要一个库来完成这项工作,spawnAsync不需要吗?@SuperUberDuper,不需要。它是异步使用的。