i binden ist die Ausgabe eines Perl-Skript in Node.jsNode.js child.spawn stdout "live" in jeder Zeile
for (my $i=10;$i<100 ;$i+=30)
{
printf "$i\n";
sleep(1);
}
Dieses Skript zu verwenden, wird von der child_process.spawn Methode aufgerufen. Mein Problem ist, dass ich mit jedem einzelnen Ausgang arbeiten muss. Gibt es eine Möglichkeit, ein Event zu starten, sobald perl eine neue Zeile an stdout gesendet wird? In meinem eigentlichen Code kann ich die Ausgabe als Masse sehen, nachdem der Perl-Skript ausgeführt wird beendet und es ist nicht möglich, mit einzelnen Linien zu arbeiten
function setStuff() {
var command = "perl";
var scriptpath = "script.pl";
var arg = [scriptpath];
run(command, arg);
}
function run(cmd, arg) {
var spawn = require('child_process').spawn;
var command = spawn(cmd, arg, {detached: true, stdout: 'pipe'});
command.unref();
var lineBuffer = "";
command.stdout.pipe(process.stdout);
command.stdout.on('data', function (data) {
lineBuffer += data.toString();
var lines = lineBuffer.split("\n");
for (var i = 0; i < lines.length - 1; i++) {
var line = lines[i];
console.log(line);
}
});
}
Vielen Dank! Es funktioniert wie es soll! setEncoding ging verloren, indem der Code komfortabler wurde. Eigentlich war es im ursprünglichen Code – DeZeT