2016-12-21 19 views
1

GitHub上のublockoriginプロジェクトからインスピレーションを得たいくつかのアドオン/拡張機能をいくつかのbashコードに書き直しています。gulpで引数を指定してコマンドを実行する

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

私はgulp-run,gulp-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 

誰かが、私はそれを動作させるために何をすべきかの変化は、私にしてください教えてください。

答えて

2

最後にchild_process.spawn()を使用しているのは、私がお勧めするアプローチですが、python実行ファイルに引数を渡す方法が間違っています。

各引数は、配列の別の要素として渡されなければなりません。あなたはただ一つの文字列を渡すことはできません。 spawn()は文字列を1つの引数として解釈し、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); 
}); 
+0

は以前よりも良い音。 gulpは13 ms後に 'python-bsff'が終了しましたが、pythonファイルが行うはずの変更はそこにありません。 ディレクトリのアドレス指定に関連するものがあれば、それが起こる可能性がありますか? –

+0

非同期完了を正しく通知していないため、13ms後に終了します(自分の編集を参照)。また、( 'gulpfile.js 'が置かれているディレクトリの)コマンドラインで' python ./tools/make-firefox-meta.py ../ firefox_debug/'を実行してみてください。それがそこで働くならば、それは肥満から働くでしょう。 –

+0

今、働いています。私はあなたからのasycタスクのシグナリングを学びました。ありがとう –

関連する問題