ruby ​​popen3 - Wie wiederhole ich stdin & lese stdout ohne re-opening process?

8

Ich verwende Open3 's popen3 Methode, um einen Prozess zu starten, der in einer Konsole ähnlich funktioniert / REPL Mode, um wiederholt Eingaben zu akzeptieren und Ausgaben zurückzugeben.

>

Ich bin in der Lage, den Prozess zu öffnen, Eingaben zu senden und die Ausgabe mit einem Code wie dem folgenden zu erhalten:

%Vor%

Ich möchte das mehrmals hintereinander machen, ohne den Prozess erneut zu öffnen, da es sehr lange dauert, bis ich den Prozess starte.

Ich weiß, dass ich stdin schließen muss, damit stdout zurückkehren kann. Aber was ich nicht weiß, ist Wie öffne ich 'stdin' wieder, damit ich mehr Eingaben schreiben kann?

Idealerweise möchte ich so etwas tun:

%Vor%

Lösung

Dank pmoos Antwort konnte ich eine Lösung mit PTY und expect erstellen, wobei ich die Eingabeaufforderung erwarte, die der Prozess zurückgibt, wenn er für weitere Eingaben bereit ist:

%Vor%     
Stu Blair 04.04.2014, 01:01
quelle

1 Antwort

3

Sie können mit expect library erfolgreich sein und den untergeordneten Prozess verwenden, um das Ende jeder Ausgabe explizit zu markieren, beispielsweise:

%Vor%

Als Bonus hat expect eine Option timeout .

    
pmoo 05.04.2014, 01:34
quelle

Tags und Links