Monday 6 March 2017

Nodejs Stdout Binär Optionen

Beim Versuch, Daten in Node. js aus einem ImageMagick-Child-Prozess zu lesen, kommt es beschädigt. Ein einfacher Testfall wäre der folgende: Ich würde erwarten, dass das Äquivalent der Kommandozeile ist. Konvertieren. test. jpg - gt test2.jpg, das die Binärdatei korrekt schreibt. Ursprünglich war ein Problem mit der MaxBuffer-Option zu klein und was zu einer abgeschnittenen Datei führte. Nach dem Erhöhen der Datei erscheint nun die Datei etwas größer als erwartet und ist immer noch beschädigt. Die Daten von stdout werden benötigt, um über HTTP zu senden. Was wäre der richtige Weg, um diese Daten aus dem ImageMagick stdout zu lesen gefragt 28. Mai 11 um 20:09 Wenn Timeout größer als 0 ist, dann wird es den Kind-Prozess zu töten, wenn es länger läuft als Timeout Millisekunden. Der Kinderprozess wird mit killSignal getötet (Standard: SIGTERM). MaxBuffer gibt die größte Datenmenge an, die bei stdout oder stderr erlaubt ist - wenn dieser Wert überschritten wird, wird der untergeordnete Prozess getötet. Also, wenn Ihr Bild über die Standard-Puffergröße von 2001024 Bytes ist, wird Ihr Bild beschädigt werden, wie Sie erwähnt haben. Ich war in der Lage, es zu bekommen, um mit dem folgenden Code zu arbeiten: Hier habe ich Spawn verwendet, um einen Stream-Stdout zu bekommen, dann habe ich einen Writeable Stream benutzt, um die Daten im Binärformat zu schreiben. Nur getestet und konnte das resultierende test2.jpg Bild öffnen. BEARBEITEN Ja, damit kannst du das Ergebnis über HTTP senden. Heres ein Beispiel von mir Downsizing ein Bild mit konvertieren, dann Posting das Ergebnis in die Glowfoto API: Danke, it39s wahr Ich habe völlig verpasst die maxBuffer Option, aber es doesn39t scheinen die Korruption zu lösen. Wenn du das mit meinem Beispiel vergrößert hast, ist die resultierende Datei nicht mehr zu klein, aber immer noch beschädigt. Ihr Beispiel funktioniert, aber ich muss eigentlich noch mehr mit den Daten machen, als es in eine andere Datei zu bringen. Genauer gesagt, müsste ich es in einer HTTP-Antwort mit dem Express-Framework zum Beispiel schreiben. Ndash Daniel Cremer Mai 28 11 um 22:06 Daniel Ich habe es gerade versucht, indem ich die Spawn Linie zu ändern. Var konvertieren spawn (39convert39, 39test. jpg39, 39-resize39, 395039, 39-39) und bekam eine funktionierende JPEG-Datei skaliert 50. Versuchen Sie, Ihren Beitrag mit dem zu aktualisieren, was Sie jetzt haben. Ndash onteria Mai 28 11 at 22: 12Lesen Sie Text und Binärdaten mit Node. js lesbaren Streams Dieses Tutorial erklärt die Verwendung und Erstellung von node. js lesbaren Streams: Versionsinformation Autor: Jeff Barczewski Veröffentlicht: August 3rd, 2013 Tags: nodejs, Streams Level: Intermediate Voraussetzungen: Krypto, Events, Installationen npm Module Node. js v0.10 (letzter Stall ist v0.10.15 ab diesem Schreiben), aber Ströme sind in der Regel ein Teil von Node. js aus seinen frühen Tagen Streams2 sein kann Verwendet mit älteren Versionen von Knoten mit npm-Modul readable-stream Konsumieren oder mit lesbaren Streams Einfache Beispiel für das Lesen einer Datei und Echo es zu stdout: Erstellen einer sha1 Digest einer Datei und Echo das Ergebnis zu stdout (ähnlich Shasum): Die Datenereignis wird auf dem lesbaren Stream für jeden Datenblock abgefeuert, also aktualisst du den Digest mit jedem Chunk, während du gehst, dann endlich wird das Endereignis ausgelöst, wenn der Stream beendet ist, damit du das Endergebnis ausgeben kannst. Beachten Sie, dass jedes Mal, wenn Sie. on () anrufen, um einen Zuhörer zu registrieren, gibt es den ursprünglichen Stream zurück, damit Sie Methoden einfach ketten können. Mit Node. js 0.10 gibt es einen besseren Weg, um Streams zu verbrauchen. Die lesbare Schnittstelle macht es einfacher, mit Streams zu arbeiten, vor allem Streams, wo Sie andere Dinge zwischen dem Erstellen eines Streams und der Verwendung des Streams tun möchten. Diese neueren lesbaren Streams sind Pull-Streams, wo Sie die Daten anfordern, wenn Sie dafür gelesen werden, anstatt die Daten zu Ihnen geschoben zu haben. Der Schlüssel zum Verständnis dieses Beispiels ist, dass mit den neuen Streams2 Lesbare Schnittstelle ein lesbares Ereignis ausgesendet wird, sobald Daten verfügbar sind, um gelesen zu werden, und Sie können anrufen. read (), um Chunks davon zu lesen. Sobald es keine Daten mehr gibt. Read () gibt null zurück, aber dann wird wieder ein lesbares Ereignis ausgelöst, wenn Daten wieder verfügbar sind. Dies geht bis zum Ende der Datei weiter, wenn das Ende wie vorher gefeuert wird. Produzieren eines lesbaren Streams Um Streams mit dem Dateisystem oder von http zu verwenden, kannst du den Kern fs und http Methoden verwenden, um einen Stream zu konstruieren, aber wie würdest du deinen eigenen Stream erstellen und ihn mit Daten füllen. Dies könnte Daten aus einer Datenbank oder sein Aus einer beliebigen Anzahl von Quellen. Hier ist ein Beispiel für die Erstellung eines lesbaren Streams, der aus zufälligen Binärdaten erzeugt wird. Dies wäre bei der Erstellung von Streams zum Testen nützlich: Hinweis: Nach dem Lesen () heißt das, wir sollten weiterlesen, bis wir fertig sind oder bis push () false zurückgibt. Verwenden von Streams2 mit älteren Node. js-Versionen Wenn Sie diesen Code mit Node. js älter als 0,10 bearbeiten möchten, können Sie eine Abhängigkeit für den lesbaren Stream in Ihrem package. json hinzufügen und die Zeile 5 ändern, um zu lesen: Dies wird die native verwenden Lesbarer Stream, wenn Node. js Version 0.10 ist und wenn nicht, dann lädt es das polyfill lesbare Stream-Modul und benutzt es von dort aus. Pause Fortsetzung von Stream und Streams2 Da Streams manchmal Daten schneller liefern können, als eine Anwendung es verbrauchen kann, beinhalten Streams die Fähigkeit zu pausieren und die Daten werden gepuffert, bis der Stream wieder aufgenommen wird. Vor dem Streams2 müssten Sie sorgfältig darauf achten, pausieren und wieder aufnehmen Methoden sowie Pufferung der Daten, bis wieder aufgenommen. Allerdings lesbar von streams2 (Node. js 0.10 oder über das lesbare Stream-Paket) implementiert diese Funktionalität für Sie und Streams werden automatisch pausiert, bis. read () aufgerufen wird. Sie können auch alte Streams mit einem Readable umwandeln, um die neue Schnittstelle auf dem alten Stream zu implementieren: Eine andere Situation, wo Sie sich Sorgen um Pause und Fortsetzung machen müssen, ist, wenn Ihr verbrauchender Code die alte Push-Style-Schnittstelle nennt. on (39data39, listener). Dies setzt den Stream in den Rückwärtskompatibilitätsmodus und du müsst anrufen. Pause () und. resume () um die Rate der Daten zu steuern, die zu deiner Anwendung kommen. Weitere Informationen finden Sie in den Stream-API-Dokumenten, wenn Sie die ältere Schnittstelle in Ihrem Code verwenden. Objekt-Streams Anfänglich, als Ströme eingeführt wurden, zeigte die offizielle API an, dass Datenblöcke, die gestreamt werden, Puffer oder Strings sein würden, aber viele Benutzer fanden, dass es großartig war, auch Objekte zu streamen. Streams2 in Node. js 0.10 hat einen Objektmodus zu Streams hinzugefügt, um zu formalisieren, wie das funktionieren sollte. Im Objektmodus. Read (n) gibt einfach das nächste Objekt zurück (ignoriert das n). Um einen Stream in den Objektmodus zu schalten, setzen Sie die objectMode-Eigenschaft auf true in den Optionen, die verwendet werden, um Ihren lesbaren Stream zu erstellen. So können Sie Objekte in Strömen genauso einfach verwenden, wie Sie Puffer und Strings verwenden können, aber die einzige Einschränkung ist, dass die Objekte Sie sind Pass kann nicht null sein, da dies zeigt, dass der Stream beendet ist. Node. js lesbare Ströme sind flexibel und einfach Node. js lesbare Ströme sind einfach zu verbrauchen und sogar einfach zu konstruieren. Sie können nicht nur Stream Binär-und String-Daten, sondern auch Objekte und noch nutzen die Stream-Funktionalität. Ich hoffe, dass Sie diese schnelle Tour durch lesbare Ströme genossen haben, lassen Sie mich wissen, wenn Sie irgendwelche Fragen haben. Für weitere Lesung Diese Seite teilen Ein einfacher Weg, um Python-Skripte von Node. js mit einfacher, aber effizienter Interprozesskommunikation und besserer Fehlerbehandlung auszuführen. Zuverlässige Spawn-Python-Skripte in einem Kind-Prozess Eingebauter Text, JSON - und Binär-Modi Benutzerdefinierte Parser und Formatierer Einfache und effiziente Datenübertragung durch Stdin - und Stdout-Streams Erweiterte Stack-Traces, wenn ein Fehler ausgelöst wird Um die Tests auszuführen: Python-Skript ausführen: If Das Skript schreibt an stderr oder beendet mit einem Nicht-Null-Code, ein Fehler wird geworfen. Ausführen eines Python-Skripts mit Argumenten und Optionen: Datenaustausch zwischen Node und Python: Verwenden Sie. send (message), um eine Nachricht an das Python-Skript zu senden. Bringen Sie das Nachrichtenereignis an, um Nachrichten zu hören, die vom Python-Skript ausgesendet wurden. Verwenden Sie options. mode, um schnell einzurichten, wie Daten zwischen Ihren Knoten - und Python-Anwendungen gesendet und empfangen werden. Verwenden Sie den Textmodus für den Austausch von Textzeilen verwenden json-Modus für den Austausch von JSON-Fragmenten verwenden Sie den Binärmodus für irgendetwas anderes (Daten werden gesendet und empfangen als-ist) Für weitere Details und Beispiele einschließlich Python-Quellcode, werfen Sie einen Blick auf die Tests. Fehlerbehandlung und erweiterte Stack-Traces Ein Fehler wird ausgelöst, wenn der Prozess mit einem Nicht-Null-Exit-Code beendet wird oder wenn Daten in stderr geschrieben wurden. Wenn Stderr einen formatierten Python-Traceback enthält, wird der Fehler zusätzlich mit Python-Exception-Details einschließlich einer verketteten Stack-Trace erweitert. Beispielfehler mit Traceback (von testpythonerror. py): würde in den folgenden Fehler führen: und err. stack würde so aussehen: PythonShell (Skript, Optionen) Konstruktor Erstellt eine Instanz von PythonShell und startet das Python-Prozess-Skript. Den Pfad des Skripts, um Optionen auszuführen. Die Ausführungsoptionen, bestehend aus: mode. Konfiguriert, wie Daten ausgetauscht werden, wenn Daten über stdin und stdout fließen. Die möglichen Werte sind: Text. Jede Datenzeile (endend mit n) wird als Nachricht (default) json ausgegeben. Jede Zeile von Daten (endend mit n) wird als JSON analysiert und als Meldungs-Binär ausgegeben. Daten werden durch Stdout - und Stdin-Formatierer gestreamt. Jede zu sendende Nachricht wird mit dieser Methode transformiert und dann mit n Parser angehängt. Jede Zeile von Daten (endend mit n) wird mit dieser Funktion analysiert und ihr Ergebnis wird als Nachrichtencodierung ausgegeben. Die Textcodierung, die auf die untergeordneten Prozessströme angewendet wird (default: utf8) pythonPath. Der Pfad, wo die Python-ausführbare Datei zu finden ist. Voreinstellung: python pythonOptions. Array of Option schaltet auf python scriptPath übergeben. Der Standardpfad, wo man nach Skripten sucht. Standard ist das aktuelle Arbeitsverzeichnis. Args Array von Argumenten, um an das Skript zu übergeben Andere Optionen werden an childprocess. spawn weitergeleitet. PythonShell-Instanzen haben folgende Eigenschaften: Skript. Der Pfad des Skripts zum Ausführen des Befehls. Die vollständigen Befehlsargumente an die Python ausführbare stdin übergeben. Der Python-Stdin-Stream, der zum Senden von Daten an den Kinderprozess stdout verwendet wird. Der Python-Stdout-Stream, der zum Empfangen von Daten aus dem untergeordneten Prozess stderr verwendet wird. Der Python-Stderr-Stream, der für die Kommunikation von Fehlern verwendet wird. Die über childprocess. spawn angelegte Prozessinstanz wurde beendet. Boolean, ob der Prozess exitCode verlassen hat. Der Prozess-Exit-Code, der verfügbar ist, nachdem der Prozess beendet ist Konfiguriert Standardoptionen für alle neuen Instanzen von PythonShell. Run (script, options, callback) Führt das Python-Skript aus und ruft den Rückruf mit den Ergebnissen auf. Der Rückruf enthält den Ausführungsfehler (falls vorhanden) sowie ein Array von Nachrichten, die aus dem Python-Skript emittiert werden. Diese Methode gibt auch die PythonShell-Instanz zurück. Sendet eine Nachricht an das Python-Skript über stdin. Die Daten werden nach dem gewählten Modus (Text oder JSON) oder über eine benutzerdefinierte Funktion formatiert, wenn der Formatierer angegeben ist. Analysiert eingehende Daten aus dem über Stdout geschriebenen Python-Skript und gibt Nachrichtenereignisse aus. Diese Methode wird automatisch aufgerufen, wenn Daten von stdout empfangen werden. Schließt den Stdin-Stream, so dass die Python-Skript zu beenden und zu beenden. Der optionale Rückruf wird aufgerufen, wenn der Prozess beendet wird. Brennt, wenn ein Stück Daten aus dem Stdout-Stream über die Empfangsmethode analysiert wird. Wenn eine Parser-Methode angegeben ist, ist das Ergebnis dieser Funktion der Meldungswert. Dieses Ereignis wird im Binärmodus nicht ausgegeben. Brennt, wenn der Prozess beendet wurde, mit einem Fehler oder nicht. Brennt, wenn der Prozess mit einem Nicht-Null-Exit-Code endet oder wenn Daten in den Stderr-Stream geschrieben werden. Die MIT-Lizenz (MIT) Copyright (c) 2014 Nicolas Mercier Die Erlaubnis wird Ihnen kostenlos zur Verfügung gestellt, um eine Kopie dieser Software und zugehöriger Dokumentationsdateien (Software) zu erhalten, um die Software ohne Einschränkung, einschließlich ohne, zu behandeln Die Vervielfältigung, Vervielfältigung, Verbreitung, Unterlizenzierung, Vervielfältigung, Verbreitung, Unterlizenzierung und Veräußerung von Kopien der Software und die Erlaubnis von Personen, denen die Software zur Verfügung gestellt wird, unter den folgenden Bedingungen: Der oben genannte Copyright-Hinweis und Diese Erlaubnismitteilung ist in allen Kopien oder wesentlichen Teilen der Software enthalten. DIE SOFTWARE WIRD OHNE GEWÄHRLEISTUNG JEGLICHER ART, AUSDRÜCKLICH ODER STILLSCHWEIGEND, EINSCHLIESSEN, ABER NICHT BESCHRÄNKT AUF DIE GEWÄHRLEISTUNG DER MARKTGÄNGIGKEIT, EIGNUNG FÜR EINEN BESTIMMTEN ZWECK UND NICHTVERLETZUNG. IN KEINEM FALL HAFTEN DIE AUTOREN ODER URHEBERRECHTLICHEN HOLDERS FÜR IRGENDEINEN ANSPRÜCHE, SCHÄDEN ODER ANDERER HAFTUNG, OHNE VERTRAG, SCHÄDEN ODER ANDERWEITIG, DIE AUS ODER IN VERBINDUNG MIT DER SOFTWARE ODER DER VERWENDUNG ODER ANDEREN HÄNDLERN IN DER SOFTWARE.


No comments:

Post a Comment