2016-12-21 3 views
1

Я переписываю некоторый код bash в gulp, который создает несколько надстроек/расширений для разных браузеров, вдохновленных проектом на GitHub.Выполнение команды с аргументами в gulp

Для Firefox есть строка, которая должна запускать скрипт python, который принимает целевой каталог в качестве аргумента. В gulp мне сложно запустить этот скрипт 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: это был наиболее перспективным, так как я видел некоторый вывод из питона в командной строке.

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() интерпретирует строку как один аргумент, а 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 завершен «python-bsff» через 13 мс, но изменения, которые должен выполнять файл python, не существует. Все, что связано с каталогом, связанным с каталогом, может привести к этому? –

+0

Он заканчивается через 13 мс, потому что вы неправильно сигнализируете о завершении асинхронного (см. Мое редактирование).Также попробуйте запустить 'python ./tools/make-firefox-meta.py ../ firefox_debug /' в командной строке (в каталоге, где находится ваш 'gulpfile.js'). Если он там работает, он будет работать от глотки. –

+0

сейчас, он работает. Я узнал о вас по вашим задачам. благодаря –

Смежные вопросы