gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 20:51:20 25 4
gpt4 key购买 nike

我正在尝试使用 child_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 任务运行此命令时,它运行良好并且可以看到预期的输出。

最佳答案

两者都是Gulpchild_process异步函数使用 Node 风格的错误优先回调。

spawn 用于在命令执行期间处理流。如果只需要等到命令完成,execexecFile 会执行此操作:

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

关于javascript - 如何在 gulp 任务中运行 shell 命令并检测它何时完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51715828/

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