在Gulp中运行带有参数的命令



我正在重写Gulp中的一些BASH代码,该代码生产了GitHub上ublockorigin Project启发的不同浏览器的几个附加组件/扩展。

对于Firefox,有一条线应该运行一个python脚本,该脚本将目标目录作为参数。在Gulp中,我很难运行此Python脚本。

我尝试了 gulp-rungulp-shellchild_process,但没有一个给我正确的输出。

当我从命令行运行python ./tools/make-firefox-meta.py ../firefox_debug/时,我得到了所需的结果,并创建了firefox_debug目录。

这是我的gulp-run代码:

gulp.task("python-bsff", function(){
    return run("python ./tools/make-firefox-meta.py ../firefox_debug/").exec();
});

这给了我这个而没有实际做任何事情:

$ gulp python-bsff
[14:15:53] Using gulpfile ~devgulpfile.js
[14:15:53] Starting 'python-bsff'...
[14:15:54] Finished 'python-bsff' after 629 ms
$ python ./tools/make-firefox-meta.py ../firefox_debug/

这是我的gulp-shell代码:

gulp.task("python-bsff", function(){
   return shell.task(["./tools/make-firefox-meta.py ../firefox_debug/""]);
});

这给了我这一点而没有实际结果:

$ gulp python-bsff
[14:18:54] Using gulpfile ~devgulpfile.js
[14:18:54] Starting 'python-bsff'...
[14:18:54] Finished 'python-bsff' after 168 μs

这是我对child_process的代码:这是最有前途的代码,因为我在命令行上看到了Python的一些输出。

gulp.task("python-bsff", function(){
  var spawn = process.spawn;
  console.info('Starting python');
  var PIPE = {stdio: 'inherit'};
  spawn('python', ["./tools/make-firefox-meta.py `../firefox_debug/`"], PIPE);
});

它给了我这个输出:

[14:08:59] Using gulpfile ~devgulpfile.js
[14:08:59] Starting 'python-bsff'...
Starting python
[14:08:59] Finished 'python-bsff' after 172 ms
python: can't open file './tools/make-firefox-meta.py     ../firefox_debug/`': [Errno 2] No such file or directory

有人可以告诉我,我应该做些什么使它起作用?

最后一个使用child_process.spawn()的方法确实是我建议的方法,但是您将参数传递给python可执行文件是错误的。

每个参数必须作为数组的单独元素传递。您不能只通过一个字符串。spawn()将把字符串解释为单个参数,python将寻找一个名为 ./tools/make-firefox-meta.py `../firefox_debug/`的文件。当然,这不存在。

所以而不是这样:

spawn('python', ["./tools/make-firefox-meta.py `../firefox_debug/`"], PIPE);

您需要这样做:

spawn('python', ["./tools/make-firefox-meta.py", "../firefox_debug/"], PIPE);

您还需要正确发出异步完成的信号:

gulp.task("python-bsff", function(cb) {
  var spawn = process.spawn;
  console.info('Starting python');
  var PIPE = {stdio: 'inherit'};
  spawn('python', ["./tools/make-firefox-meta.py", "../firefox_debug/"], PIPE).on('close', cb);
});

相关内容

  • 没有找到相关文章