Ich kann Bash-Befehle mit Racket mit (system "some command")
ausgeben, aber die Funktion gibt #t anstelle der resultierenden Ausgabe von der Befehlszeile zurück, die nur gedruckt wird. Wie kann ich das Ergebnis des Befehls erhalten, um mit der Funktion zurückgegeben zu werden?Wie wird das Kommandozeilenergebnis in Racket zurückgegeben?
5
A
Antwort
7
Die system
Prozedur setzt stdout
auf den Wert des Parameters current-output-port
. Das bedeutet, dass wir alles, was in current-output-port
geschrieben wurde, zu einem String sammeln und zurückgeben können. Das Konstrukt with-output-to-string
setzt current-output-port
auf einen Port, der nichts ausgibt, aber schließlich den als Zeichenfolge an den Port geschriebenen Wert zurückgibt.
> (with-output-to-string (lambda() (system "date")))
"Sat Jun 25 12:20:12 CEST 2016\n"