Meine Frage ist einfach: Kann ich expect()
bestimmte Ausgabe auf stderr mit Pexpect sehen? Es scheint pexpect.spawn()
kann nur verwendet werden, um Ausgabe auf stdout zu erwarten.Extrahieren von Stderr von Pexpect
utopisches Beispiel:
import pexpect child = pexpect.spawn(...) child.expect("hi", fd=pexpect.STDERR)
oder in Prosa, "erwartet den String 'hallo' auf stderr".
Ich habe keine Erwähnung einer solchen Anlage in der Dokumentation gefunden, aber ich beachten Sie, dass die child
Instanz ein stderr
Attribut ...
Ein Hack, die halb erreicht, was ich will, ist stderr zu umleiten Um in den Spawn-Argumenten zu stdout, können wir reguläre expect()
verwenden. Es muss einen besseren Weg geben?
Prost
Pexpect läuft Ihr subprocess in einem pty, so dass alle Standard-Streams (stdin, stdout und stderr) werden auf diesen pty hingewiesen, und der steuernde Prozeß schreibt in diesen einzelnen pty und liest von diesem. Es hat keinen Zugriff auf stdout und stderr separat: Sie werden in der Ausgabe verschachtelt, wie der Prozess in einem regulären Terminal ausgeführt wird. Wenn Sie einen separaten Zugriff benötigen, können Sie den Prozess mit 'subprocess.Popen' starten und dann' pexpect.fdpexpect.fdspawn' verwenden, um nur eine der Pipes zu betrachten. –
Danke. Das klingt, als würde es funktionieren. Haben Sie ein Beispiel und ich werde es als die Antwort markieren :) –