Die Standardausgabe Stdout des Node.js child_process exec ist kurz geschnitten
In Node.js ich bin mit dem exec-Befehl, der child_process-Modul aufrufen, einen Algorithmus in Java, gibt eine große Menge von text auf standard heraus, welche ich dann analysieren und zu verwenden. Ich bin in der Lage zu erfassen, ist es meist, aber wenn es über eine bestimmte Anzahl von Zeilen, der Inhalt ist cutoff.
exec("sh target/bin/solver "+fields.dimx+" "+fields.dimy, function(error, stdout, stderr){
//do stuff with stdout
}
Ich habe versucht, mit setTimeouts und Rückrufe aber noch nicht gelungen, aber ich habe das Gefühl, dies geschieht, weil ich bin Referenzierung stdout in meinem code ein, bevor Sie abgerufen werden können, vollständig. Ich habe getestet, dass stdout ist in der Tat-wo der Verlust von Daten zuerst Eintritt. Es ist nicht ein asynchron-Problem weiter unten auf der Linie. Ich habe auch getestet, die auf meinem lokalen Rechner und Heroku, und das exakt gleiche Problem tritt auf, abschneiden an der exakt gleichen Zeilennummer zu jeder Zeit.
Irgendwelche Ideen oder Vorschläge, was helfen könnte?
InformationsquelleAutor Alex H Hadik | 2014-01-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bearbeitet:
Ich habe versucht mit
dir /s
auf meinem computer (windows
) und hab das gleiche problem( und es Aussehen wie ein Fehler), wird dieser code lösen das problem für mich:sehen Sie die Geschichte von dieser Antwort, ich habe erhöhte Puffer-Größe, aber es funktioniert nicht für mich.
Ich bin unter windows auch, und es funktioniert gut :/
InformationsquelleAutor damphat
Hatte ich exec.stdout.auf('Ende') Rückrufe hing immer mit @damphat Lösung.
Andere Lösung ist die Erhöhung der Puffergröße in den Optionen exec: finden Sie in der Dokumentation hier
Zitieren: maxBuffer gibt die größte Menge von Daten erlaubt, die auf stdout oder stderr -, wenn dieser Wert überschritten wird, dann wird der Kind-Prozess wird getötet. Ich verwende jetzt folgende: dies bedeutet nicht, dass Umgang mit dem getrennt Teile des chunks, die durch Kommas getrennt in stdout, im Gegensatz zu den akzeptierten Lösung.
InformationsquelleAutor olamotte
Die richtige (und beste) Lösung für dieses problem ist die Verwendung spawn anstelle von exec.
Wie gesagt in diesem Artikel, spawn ist besser geeignet für den Umgang mit großen Datenmengen :
spawn erfordert eine andere syntax als exec :
exec
wurde wieder ein Fehler wegen der 1 MB-Ausgabe. Leider ist das error-Objekt vonexec
war nur die Rückgabe der name des Befehls, ohne Detaillierung der Grund für den Fehler:{"cmd":"./read_mail.sh"}
InformationsquelleAutor igelineau