Unbuffered Subprozess stdout in Windows

9

Gibt es eine einfache Möglichkeit, die Ausgabe des ungepufferten Subprozesses zu lesen? Ich versuche, ein C-Programm von Java aufzurufen, aber anscheinend ist es stdout block-gepuffert, wenn eine Verbindung zu einer Leitung besteht, und eine Leitungspufferung, nur wenn es mit der Konsole verbunden ist. Ich kann das C-Programm nicht ändern.

Vielleicht gibt es eine Möglichkeit, das Programm zu denken, es sei mit der Konsole verbunden? Bonuspunkte für eine Lösung, die auch auf Linux funktioniert.

    
Norill Tempest 21.09.2012, 15:58
quelle

5 Antworten

1

Es ist keine großartige Lösung, aber die Laufzeitbibliothek puffert wahrscheinlich keine seriellen Ports. Wenn Sie also verzweifelt genug sind, können Sie einen Nullmodem-Emulator verwenden, wie zB com0com oder ein Derivat davon.

    
Harry Johnston 04.12.2012 23:39
quelle
0

Haben Sie versucht, die Umgebungsvariable BUF_1_ = 0 zu verwenden?

    
Wu Yongzheng 31.10.2012 16:04
quelle
-1

OK -

1) "Line buffered input" ist eine gängige Redewendung für Konsolenprogramme, die auf die ursprünglichen Unix- und seriellen VTxx-Terminals zurückgeht.

2) Sie können "rohe, ungepufferte" E / A lesen (jeweils einen Tastendruck statt einer Zeile), die Details sind jedoch betriebssystemspezifisch. Was auch immer Sie für ein bestimmtes Betriebssystem tun müssen, können Sie fast aus Java machen.

3) Es klingt so, als ob Sie in der Lage wären, eine "Pfeil nach oben" - oder eine "Bild ab" -Taste auf einer Windows-Tastatur abzufangen. Vielleicht zum Spielen eines Spiels oder zum Interagieren mit einer Benutzeroberfläche im Konsolenmodus.

4) Es gibt mehrere Möglichkeiten. Eine, die Sie vielleicht in Erwägung ziehen, ist die "Roboter" API, die zum Testen verwendet wird:

Wenn das nicht ausreicht, geben Sie bitte genauer an, wie Sie Ihr Java-Programm zur Interaktion mit dem C-Programm bringen (und klären, ob die Plattform tatsächlich Windows und eine DOS-Eingabeaufforderung enthält).

    
paulsm4 21.09.2012 20:29
quelle
-1

Sie könnten die c-Ausgabe in eine Datei umleiten und dann die Datei aus einem anderen Thread in Java mit

zurückführen %Vor%     
user1569047 13.10.2012 07:26
quelle
-1

Am besten verwenden Sie Threads zum Lesen der Ausgabe

Was ich tun würde, ist: Verwenden eines Callable (ein Runnable funktioniert auch), wo ich die Eingabe aus dem Prozess (process.getInputStream ()) und die Ausgabe, wo ich die Ausgabe speichern möchte. Das gleiche sollte für die StdErr getan werden. Die resultierende Ausgabe kann gelesen werden, was auch immer Sie mögen.

%Vor%     
azl 03.12.2012 17:09
quelle

Tags und Links