2016-12-21 12 views
1

Ich schreibe einige Bash-Code in Schluck, die mehrere Add-Ons/Erweiterungen für verschiedene Browser, inspiriert von dem ublockorigin-Projekt auf GitHub produziert.Ausführen eines Befehls mit Argumenten in Schluck

Für Firefox gibt es eine Zeile, die ein Python-Skript ausführen soll, das ein Zielverzeichnis als Argument verwendet. In Schluck fällt es mir schwer, dieses Python-Skript auszuführen.

Ich versuchte gulp-run, gulp-shell, child_process, aber keiner von ihnen gibt mir die richtige Ausgabe.

Wenn ich python ./tools/make-firefox-meta.py ../firefox_debug/ von der Befehlszeile ausführen bekomme ich mein gewünschtes Ergebnis und das firefox_debug Verzeichnis wird erstellt.

Hier ist mein Code für gulp-run:

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

Dies wird mir diese ohne tatsächlich etwas zu geben tun:

$ 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/ 

Hier ist mein Code für gulp-shell:

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

Diese gibt mir das ohne das eigentliche Ergebnis:

$ 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 

Hier ist mein Code für child_process: dies war die vielversprechendste, da ich eine Ausgabe von Python auf der Kommandozeile sah.

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); 
}); 

Es mir diese Ausgabe ist zu geben:

[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 

Kann mir jemand bitte sagen, welche Änderung sollte ich es machen tun arbeiten?

Antwort

2

Der letzte, der child_process.spawn() verwendet, ist in der Tat der Ansatz, den ich empfehlen würde, aber die Art, wie Sie die Argumente an die ausführbare Datei python übergeben, ist falsch.

Jedes Argument muss als separates Element des Arrays übergeben werden. Sie können nicht einfach eine einzelne Zeichenfolge übergeben. spawn() interpretiert die Zeichenfolge als ein einzelnes Argument und python wird nach einer Datei suchen, die wörtlich mit dem Namen ./tools/make-firefox-meta.py `../firefox_debug/` ist. Das gibt es natürlich nicht.

Anstatt also diese:

spawn('python', ["./tools/make-firefox-meta.py `../firefox_debug/`"], PIPE); 

Sie müssen dies tun:

spawn('python', ["./tools/make-firefox-meta.py", "../firefox_debug/"], PIPE); 

Sie müssen auch richtig async completion signalisieren:

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

Sound besser als vorher. Der Schluck ist nach 13 ms 'python-bsff' beendet, aber die Änderungen, die sie durchführen sollen, sind nicht da. Anything Directory Adressierung kann dazu führen, dass? –

+0

Es endet nach 13ms, weil Sie keine asynchrone Beendigung signalisieren (siehe meine Bearbeitung).Versuchen Sie auch, 'python ./tools/make-firefox-meta.py ../ firefox_debug /' in der Befehlszeile auszuführen (in dem Verzeichnis, in dem sich 'gulpfile.js' befindet). Wenn es dort funktioniert, wird es von Schluck funktionieren. –

+0

jetzt funktioniert es. Ich habe von Ihnen das Signalisieren von asyklischen Aufgaben gelernt. Vielen Dank –

Verwandte Themen