853 Stimmen

Führen Sie ein Befehlszeilen-Binär mit Node.js aus

Ich bin dabei, eine CLI-Bibliothek von Ruby auf Node.js zu portieren. In meinem Code führe ich bei Bedarf mehrere Drittanbieter-Binärdateien aus. Ich bin mir nicht sicher, wie ich dies am besten in Node erreichen kann.

Hier ist ein Beispiel in Ruby, bei dem ich PrinceXML aufrufe, um eine Datei in eine PDF umzuwandeln:

cmd = system("prince -v builds/pdf/book.html -o builds/pdf/book.pdf")

Was ist der entsprechende Code in Node?

4voto

DUzun Punkte 1634

Die Antwort von @hexacyanide ist fast vollständig.

Auf einem Windows-Befehl könnte prince prince.exe, prince.cmd, prince.bat oder einfach prince sein (ich weiß nicht, wie Gems gebündelt sind, aber npm-Bins werden mit einem Sh-Skript und einem Batch-Skript geliefert - npm und npm.cmd).

Wenn Sie ein portables Skript schreiben möchten, das auf Unix und Windows ausgeführt wird, müssen Sie die richtige ausführbare Datei starten.

Hier ist eine einfache, aber tragbare Spawn-Funktion:

function spawn(cmd, args, opt) {
    var isWindows = /win/.test(process.platform);

    if ( isWindows ) {
        if ( !args ) args = [];
        args.unshift(cmd);
        args.unshift('/c');
        cmd = process.env.comspec;
    }

    return child_process.spawn(cmd, args, opt);
}

var cmd = spawn("prince", ["-v", "builds/pdf/book.html", "-o", "builds/pdf/book.pdf"])

// Verwenden Sie diese Eigenschaften, um die Ausführungsergebnisse zu erhalten:
// cmd.stdin;
// cmd.stdout;
// cmd.stderr;

3voto

Richard Punkte 1940

Knoten 16:

const { execSync } = require('child_process');
execSync('ls'); // dein Systembefehl

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X