Python 使用gulp中的参数运行命令

Python 使用gulp中的参数运行命令,python,gulp,firefox-addon,child-process,gulp-shell,Python,Gulp,Firefox Addon,Child Process,Gulp Shell,受GitHub项目的启发,我正在gulp中重写一些bash代码,为不同的浏览器生成几个附加组件/扩展 对于Firefox,有一行应该运行python脚本,该脚本以目标目录作为参数。在gulp中,我很难运行这个python脚本 我尝试了gulprun,gulpshell,child\u进程,但都没有给我正确的输出 当我从命令行运行python./tools/make-firefox-meta.py../firefox\u debug/时,我得到了我想要的结果,并且创建了firefox\u debu

受GitHub项目的启发,我正在gulp中重写一些bash代码,为不同的浏览器生成几个附加组件/扩展

对于Firefox,有一行应该运行python脚本,该脚本以目标目录作为参数。在gulp中,我很难运行这个python脚本

我尝试了
gulprun
gulpshell
child\u进程
,但都没有给我正确的输出

当我从命令行运行
python./tools/make-firefox-meta.py../firefox\u debug/
时,我得到了我想要的结果,并且创建了
firefox\u debug
目录

这是我的
gulprun
代码:

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/
这是我的
gulpshell
代码:

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\u进程的代码
:这是最有希望的一个,因为我在命令行上看到了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\u process.spawn()
的方法确实是我推荐的方法,但是您将参数传递给
python
可执行文件的方式是错误的

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

因此,与此相反:

spawn('python', ["./tools/make-firefox-meta.py `../firefox_debug/`"], PIPE);
您需要这样做:

spawn('python', ["./tools/make-firefox-meta.py", "../firefox_debug/"], PIPE);
您还需要正确地发出信号:


听起来比以前好多了。13毫秒后,“pythonbsf”就完成了吞咽,但是python文件应该做的更改并不存在。任何与目录寻址相关的内容都可能导致这种情况?它会在13毫秒后结束,因为您没有正确地发出异步完成的信号(请参阅我的编辑)。还可以尝试在命令行上运行
python./tools/make-firefox-meta.py../firefox\u debug/
(在
gulpfile.js
所在的目录中)。如果它在那里工作的话,它会一口气工作。现在,它正在工作。我从你那里学到了asyc任务的信号。谢谢
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);
});