Wenn Sie einen Befehl von einem sheel ausführen und die >>
Umleitungsoperator verwenden, oder in der Tat eines der Standard |
, >
und ähnliche, derjenige, der die Umleitung macht, ist die Shell, nicht Python.
Dies bedeutet, dass der Python-Interpreter keine Informationen über den Namen der Datei hat, die für die Umleitung verwendet wird. Da die Dateierstellung und Dateiverwaltung durch die Shell erfolgt, können Sie das nicht beeinflussen (und sollten dies auch nicht). Ich nehme an, dass Sie nicht erlaubt sein werden und der Benutzer würde keine Tricks erwarten.
Wenn Sie das Verhalten Ihrer Anwendung abhängig von der Tatsache, dass die Ausgabe umgeleitet wird, anpassen möchten, werfen Sie einen Blick auf sys.stdout.isatty()
Methode, die True
zurückgibt, wenn das Skript von einem interaktiven tty aufgerufen wurde. Wenn die Ausgabe umgeleitet wird, wird False
zurückgegeben. Beachten Sie jedoch, dass es einige Szenarien gibt, in denen isatty()
den Wert false zurückgibt, aber der Grund kein Umleitungsoperator ist (wie der Pipe-Operator oder ein drittes Skript, das einen Aufruf Ihres Skripts enthält).
Natürlich könnten Sie den Umleitungsoperator vermeiden und ein Argument für Ihr Skript verwenden. Ohne weitere Informationen würde ich Ihnen raten, dies so zu tun, dass Sie die vollständige Kontrolle über das Verhalten haben und es dokumentieren könnten (anstatt sich auf eine Shell-Sache zu verlassen, die portabel und flexibel sein kann).
Der Umleitungsoperator ist eine Shell-Funktion. Und ich nehme an, Sie beziehen sich auf stdout (stdin ist Standardeingabe, stdout ist Standardausgabe). Ich wette, dass die Shell * keine * Informationen über den Umleitungsoperator an das Skript weiterleitet, aber vielleicht gibt es einen Weg ... vielleicht sollten Sie der Frage ein Shell-Tag hinzufügen. – MariusSiuram