Bitte gehen Sie zum 2. Update. Ich wollte den vorherigen Kontext dieser Frage nicht ändern.
Ich verwende wkhtmltoimage von einer Java-App.
Die Standardmethode dafür ist - path-to-exe http://url.com/ image.png
.
Wenn wir gemäß ihrer Dokumentation eine -
anstelle einer Eingabe-URL schreiben, wechselt die Eingabe zu STDIN.
Ich beginne den Prozess mit ProcessBuilder
-
Jetzt kann ich nicht herausfinden, wie man einen Eingabestream zu diesem Prozess leitet.
Ich habe eine Vorlagendatei in ein DataInputStream
eingelesen und füge am Ende eine Zeichenfolge an:
Wie übergebe ich content
an die STDIN
des Prozesses?
UPDATE ---
Nach der Antwort von Andrzej Doyle:
Ich habe die getOutputStream()
des Prozesses verwendet:
Dies führt zu einem Fehler, der besagt:
%Vor%2. UPDATE --------
Der aktuelle Codeblock ist so:
%Vor% Das Ausführen des obigen Codes gibt mir IOException: The pipe is being closed.
Was muss ich noch tun, um das Rohr offen zu halten?
Entfernen Sie das Leerzeichen aus " - "
- die normalen Leerzeichen werden vom Shell-Parser entfernt, aber hier in ProcessBuilder
wird es als (literaler) Dateiname interpretiert, der mit einem Leerzeichen beginnt und endet.
(Wenn man sich die Ausgabe des Prozesses anschaut, wie es Peter vorgeschlagen hat, hätte er das wahrscheinlich schon gesagt ...)
Ausnahme im Thread "main" java.io.IOException: Die Pipe wurde beendet
Dies bedeutet, dass der Prozess, den Sie begonnen haben, gestorben ist. Ich schlage vor, Sie lesen die Ausgabe, um zu sehen, warum. z.B. Hat es dir einen Fehler gegeben?
Gibt es einen Grund, warum Sie DataInputStream zum Lesen einer einfachen Textdatei verwenden? Aus der Java-Dokumentation
Ein Dateneingangsstrom ermöglicht einer Anwendung, primitive Java-Datentypen zu lesen von einem zugrunde liegenden Eingabestrom auf eine maschinenunabhängige Art und Weise
Es ist möglich, dass die Art, wie Sie die Datei lesen, dazu führt, dass ein EOF an den Ausgabestrom gesendet wird, was dazu führt, dass die Pipe endet, bevor sie an Ihre Zeichenfolge gelangt.
Ihre Anforderung scheint zu sein, die Datei einfach zu lesen, um sie anzuhängen, bevor Sie sie an den Prozess wkhtmltoimage weiterleitet.
Sie verpassen auch eine Anweisung, um den Ausgabestream für den Prozess zu schließen. Dies führt dazu, dass der Prozess wartet (hängt), bis er einen EOF aus dem Eingabestream erhält, was niemals der Fall sein würde.
Ich würde empfehlen, stattdessen einen BufferedReader zu verwenden und ihn direkt in den Ausgabestrom zu schreiben, bevor Sie Ihre zusätzliche Zeichenfolge anhängen. Rufen Sie dann close () auf, um den Stream zu schließen.
%Vor% Nachdem Sie das Objekt Process
erstellt haben, können Sie getOutputStream()
, um einen Stream zu erhalten, der seinen Inhalt an die Standardeingabe des Prozesses sendet.
Sobald Sie sich daran gewöhnt haben, können Sie die Standard-IO von Java verwenden, um alle Bytes in den gewünschten Stream zu schreiben (einschließlich des Einschließens in einen Writer, Hinzufügen von Pufferung usw.) - und während Sie sie schreiben, werden sie es sein gelesen von dem Prozess, sobald sie gespült sind.
Tags und Links java java-io processbuilder wkhtmltopdf stdin