Das Ausführen von Drittanbieter-Binärdateien ist eine wesentliche Aufgabe bei der Portierung von CLI-Bibliotheken aus anderen Sprachen nach Node.js. Um dies in Node.js zu erreichen, stehen mehrere Module zur Verfügung:
Für gepufferte Ausgabe verwenden Sie exec:
const { exec } = require('child_process'); exec('cat *.js bad_file | wc -l', (err, stdout, stderr) => { if (err) return; // Node couldn't execute the command console.log(`stdout: ${stdout}`); console.log(`stderr: ${stderr}`); });
Wenn Sie die Ausgabe lieber als Stream erhalten möchten, verwenden Sie spawn:
const { spawn } = require('child_process'); const child = spawn('ls', ['-lh', '/usr']); // For text chunks, use `child.stdout.setEncoding('utf8');` child.stdout.on('data', (chunk) => { /* data in chunks */ }); // Pipe the stream elsewhere child.stderr.pipe(dest); child.on('close', (code) => { console.log(`Exited with code ${code}`); });
Node.js bietet auch synchrone Gegenstücke zu den Exec- und Spawn-Funktionen:
const { execSync } = require('child_process'); let stdout = execSync('ls'); const { spawnSync} = require('child_process'); const child = spawnSync('ls', ['-lh', '/usr']); console.log('error', child.error); console.log('stdout ', child.stdout); console.log('stderr ', child.stderr);
Für Versionen von Node.js vor ES5 wurden häufig die folgenden Methoden verwendet:
// Complete output as a buffer var exec = require('child_process').exec; exec('prince -v builds/pdf/book.html -o builds/pdf/book.pdf', function(error, stdout, stderr) { // command output in stdout }); // Handling large output chunks with streams var spawn = require('child_process').spawn; var child = spawn('prince', ['-v', 'builds/pdf/book.html', '-o', 'builds/pdf/book.pdf']); // Output in chunks child.stdout.on('data', (chunk) => { /* data in chunks */ }); // Piping output child.stdout.pipe(dest);
Das obige ist der detaillierte Inhalt vonWie führe ich Befehlszeilen-Binärdateien in Node.js aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!