Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.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 如何在gulp任务中运行shell命令并检测它何时';结束了吗?_Javascript_Node.js_Gulp_Child Process - Fatal编程技术网

Javascript 如何在gulp任务中运行shell命令并检测它何时';结束了吗?

Javascript 如何在gulp任务中运行shell命令并检测它何时';结束了吗?,javascript,node.js,gulp,child-process,Javascript,Node.js,Gulp,Child Process,我正在尝试使用child\u process.spawn在gulp任务中运行shell命令 我必须检测任务何时完成运行,因此我使用stdout检查我在命令末尾发出的特定字符串,但由于某些原因,它看起来不像我的字符串被发出: // gulp 3.9.1 var gulp = require('gulp'); var spawn = require('child_process').spawn; gulp.task('my-task', function(cb) { var command =

我正在尝试使用
child\u process.spawn
在gulp任务中运行shell命令

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

// 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任务运行此命令时,它运行良好,预期输出可见。

和异步函数都使用节点样式的错误优先回调

spawn
用于在命令执行期间处理流。如果只需等待命令完成,
exec
execFile
执行以下操作:

var gulp = require('gulp');
var exec = require('child_process').exec;

gulp.task('my-task', function(cb) {
  exec('cmd', cb);
});
使用
spawn
可能更复杂,因为它还允许处理退出代码:

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());
});

你这样做是故意的吗?因为等待命令输出的结束是一种非常奇怪的方式。出于某种原因,我找不到我在这个想法中引用的问题,这个想法有一个“结束字符串”的解决方案。有没有更好的方法来检测gulp任务中shell命令的结束/退出?您在命令执行中没有找到任何东西,因为问题不是特定于gulp的。