2016-12-21 9 views
1

GitHub의 ublockorigin 프로젝트에서 영감을받은 여러 브라우저에서 여러 부가 기능/확장 기능을 생성하는 gulp의 bash 코드를 다시 작성하고 있습니다.gulp에 인수가있는 명령 실행

Firefox의 경우 대상 디렉토리를 인수로 사용하는 python 스크립트를 실행해야하는 행이 있습니다. 꿀꺽 꿀꺽 마시면서, 나는이 python 스크립트를 실행하기가 힘듭니다.

나는 gulp-run, gulp-shell, child_process을 시도했지만 그 중 아무 것도 정확한 출력을 제공하지 못했습니다.

명령 줄에서 python ./tools/make-firefox-meta.py ../firefox_debug/을 실행하면 원하는 결과가 나타나고 firefox_debug 디렉토리가 만들어집니다.

gulp.task("python-bsff", function(){ 
    return shell.task(["./tools/make-firefox-meta.py ../firefox_debug/""]); 
}); 

이 : 여기

$ 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 run("python ./tools/make-firefox-meta.py ../firefox_debug/").exec(); 
}); 

이 실제로 아무것도하지 않고 나이를주고있다 : 여기

gulp-run 내 코드입니다 실제 결과가 없으면이 내용을 제공합니다.

$ 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

소리보다. 꿀꺽 꿀꺽 마시는 '파이썬 -bsff'13 ms 후,하지만 그들은 파이썬 파일을 변경 해야하는지 않습니다. 관련된 디렉토리 주소 지정으로 인해 문제가 발생할 수 있습니까? –

+0

비동기 완료를 제대로 알리지 않았기 때문에 13ms 후에 완료됩니다 (내 편집 참조).또한 명령 행 ('gulpfile.js '가 위치한 디렉토리)에서'python ./tools/make-firefox-meta.py ../ firefox_debug /'를 실행 해보십시오. 거기서 작동한다면, 꿀꺽 꿀꺽 거리는 소리에서 작동 할 것입니다. –

+0

지금 작동 중입니다. 나는 당신에게서 asyc 작업에 대한 신호를 배웠습니다. 감사 –