首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在gulp任务中运行shell命令并检测何时完成?

如何在gulp任务中运行shell命令并检测何时完成?
EN

Stack Overflow用户
提问于 2018-08-07 05:23:50
回答 1查看 2.2K关注 0票数 4

我正在尝试使用child_process.spawn在gulp任务中运行外壳命令。

我必须检测任务何时完成运行,所以我使用stdout来检查我在命令末尾发出的特定字符串,但由于某种原因,它看起来不像我的字符串正在发出:

代码语言:javascript
复制
// gulp 3.9.1
var gulp = require('gulp');
var spawn = require('child_process').spawn;

gulp.task('my-task', function(cb) {
  var command = ''; // construct my shell command here
  var end = 'end_of_command';
  var command = command + '; echo ' + end; // add special string to look for

  var cmd = spawn(command, { shell: true });

  cmd.stdout.on('data', function(data) {
    if (data.includes(end)) {
      return cb();
    }
  });
});

由于某些原因,我的echo语句没有发出,所以if语句没有被传递。

我哪里错了?

我还应该注意到,当我直接在shell中运行这个命令时,而不是通过gulp任务,它运行得很好,并且预期的输出是可见的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-07 06:11:01

Gulpchild_process异步函数都使用节点风格的错误优先回调。

spawn用于在命令执行期间处理流。如果所需要的只是等待命令完成,execexecFile会这样做:

代码语言:javascript
复制
var gulp = require('gulp');
var exec = require('child_process').exec;

gulp.task('my-task', function(cb) {
  exec('cmd', cb);
});

使用spawn可能会更加复杂,因为它还允许处理退出代码:

代码语言:javascript
复制
var gulp = require('gulp');
var spawn = require('child_process').spawn;

gulp.task('my-task', function(cb) {
  spawn('cmd', [], {})
  .on('error', cb)
  .on('close', code => code ? cb(new Error(code)) : cb());
});
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51715828

复制
相关文章

相似问题

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