运行 参数在 gulp 中的命令
Running a command with arguments in gulp
我正在重写 gulp 中的一些 bash 代码,这些代码在 GitHub 上的 ublockorigin 项目的启发下为不同的浏览器生成了多个 add-ons/extensions。 =27=]
对于 Firefox,有一行应该 运行 一个 python 脚本,该脚本将目标目录作为参数。在 gulp 中,我很难 运行 这个 python 脚本。
我尝试了 gulp-run
、gulp-shell
、child_process
,但其中 none 给出了正确的输出。
当我从命令行 运行 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 ~\dev\gulpfile.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 ~\dev\gulpfile.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 ~\dev\gulpfile.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);
您还需要正确发信号 async completion:
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);
});
我正在重写 gulp 中的一些 bash 代码,这些代码在 GitHub 上的 ublockorigin 项目的启发下为不同的浏览器生成了多个 add-ons/extensions。 =27=]
对于 Firefox,有一行应该 运行 一个 python 脚本,该脚本将目标目录作为参数。在 gulp 中,我很难 运行 这个 python 脚本。
我尝试了 gulp-run
、gulp-shell
、child_process
,但其中 none 给出了正确的输出。
当我从命令行 运行 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 ~\dev\gulpfile.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 ~\dev\gulpfile.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 ~\dev\gulpfile.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);
您还需要正确发信号 async completion:
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);
});