Wie kann ich stderr vorübergehend in Ruby umleiten?
Ich würde gerne vorübergehend umleiten von stderr in ein Ruby-Skript für die Dauer eines Blocks, dafür, dass ich es zurücksetzen auf den ursprünglichen Wert am Ende des Blocks.
Hatte ich Probleme bei der Suche, wie man dies in der ruby-docs.
InformationsquelleAutor der Frage horseyguy | 2010-12-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
In Ruby
$stderr
bezieht sich auf den output-stream, derzeit verwendet als stderr, in der Erwägung, dassSTDERR
ist die Standard stderr-stream. Es ist leicht, vorübergehend weisen eine unterschiedliche Ausgabe-stream zu$stderr
.Nun können Sie das folgende tun:
Dem gleichen Prinzip funktioniert auch für
$stdout
undSTDOUT
.InformationsquelleAutor der Antwort molf
Hier ist eine abstrakte Lösung (Kredit geht an David Heinemeier Hansson):
Verwendung:
InformationsquelleAutor der Antwort user2398029
Im wesentlichen die gleichen wie @molf Antwort, und hat die gleiche Verwendung:
Es nutzt StringIO sehr leicht prägnanter, und erhält $stderr als was auch immer es war, bevor capture_stderr genannt wurde.
InformationsquelleAutor der Antwort gunn
Ich mag die StringIO Antworten. Aber wenn Sie den Aufruf eines externen Prozesses, und
$stderr = StringIO.new
nicht funktioniert, könnten Sie schreiben stderr in eine temporäre Datei:InformationsquelleAutor der Antwort zhon