4

GitHubのublockoriginプロジェクトに触発されたさまざまなブラウザー用のいくつかのアドオン/拡張機能を生成する gulp でいくつかの bash コードを書き直しています。

Firefox の場合、宛先ディレクトリを引数として取る Python スクリプトを実行することになっている行があります。gulp では、この python スクリプトを実行するのに苦労しています。

gulp-rungulp-shell、を試しchild_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 ~\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

誰か教えてください、それを機能させるにはどのような変更を行う必要がありますか?

4

1 に答える 1

3

最後に使用したもの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);
});
于 2016-12-21T19:34:44.427 に答える