首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >nodejs child_process.spawnSync或child_process.spawn封装在返回输出的可屈服发生器中

nodejs child_process.spawnSync或child_process.spawn封装在返回输出的可屈服发生器中
EN

Stack Overflow用户
提问于 2015-09-04 08:14:27
回答 1查看 26.6K关注 0票数 18

有一段时间以来,我一直在努力达到目前为止对我不起作用的事情。

使用nodejs,我喜欢运行一个交互式sh-命令,并在命令退出后使用sh-命令输出。我喜欢编写一个可屈服的生成器函数,它封装交互式shell命令的运行并返回shell命令的输出。

方法1: shelljs

  • 贝壳类
  • 我在shelljs上取得了一些成功,但在某种程度上,它不会再继续了。
  • 问题1:是否有可能将shelljs转换到可以继承stdio并使shelljs函数可实现的程度?

方法2: child_process.spawnSync

  • process.spawnSync
  • 最后,我发现了child_process.spawnSync,并且很高兴,至少我可以运行交互式sh命令,而不存在options: { stdio: 'inherit' }的问题。
  • 但我还没有找到如何返回child_process.spawnSync的输出。
  • 问题2:如何将spawnSync包装到返回子进程输出的生成器函数中?

方法3:共子过程

  • 我还试过共子过程
  • 它似乎在运行,但没有与stdio交互。有一个问题关于这一点,我真的不明白。
  • 问题3:有人能解释我/张贴一个例子,共同子进程将如何与stdio继承工作。

方法4:用蓝知更鸟对child_process.spawn()进行编程

  • 我在蓝知更鸟上打开了一个问题,如果child_process.spawn()是可预测的

所以我的问题。有人能给我一个例子,说明如何运行一个交互式shell命令,该命令可以包装在一个可折叠的生成器函数中,返回shell命令的输出?我愿意接受新的方法。

我创建了一个可在github上使用的npm模块,您可以在该模块中对其进行分叉和贡献。

提前结束。

EN

回答 1

Stack Overflow用户

发布于 2016-01-20 19:55:42

我发现了在5.4.1版本上工作的以下内容。在docs NodeJS子过程中,它提到了默认的“缓冲区”选项编码。如果将此选项设置为“utf8 8”,则将得到一个返回结果的字符串,而不是缓冲区。您可以从spawnSync获得一个字符串,因为它是同步的,并阻止执行,直到命令完成。下面是一个脚本的工作示例,它执行'ls -l /usr‘命令并以字符串对象的形式获取输出:

代码语言:javascript
复制
#!/usr/bin/env node

var cp = require('child_process');

var ls = cp.spawnSync('ls', ['-l', '/usr'], { encoding : 'utf8' });
// uncomment the following if you want to see everything returned by the spawnSync command
// console.log('ls: ' , ls);
console.log('stdout here: \n' + ls.stdout);

当您运行它时,会得到以下内容:

代码语言:javascript
复制
stdout here:
total 68
drwxr-xr-x   2 root root 36864 Jan 20 11:47 bin
drwxr-xr-x   2 root root  4096 Apr 10  2014 games
drwxr-xr-x  34 root root  4096 Jan 20 11:47 include
drwxr-xr-x  60 root root  4096 Jan 20 11:47 lib
drwxr-xr-x  10 root root  4096 Jan  4 20:54 local
drwxr-xr-x   2 root root  4096 Jan  6 01:30 sbin
drwxr-xr-x 110 root root  4096 Jan 20 11:47 share
drwxr-xr-x   6 root root  4096 Jan  6 00:34 src

文档告诉您,除了stdout之外,还可以返回对象上的内容。如果希望看到返回对象上的所有属性,请取消对console.log的注释(警告:有很多内容:)。

票数 31
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32393250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档