2016-06-06 9 views
0

Wie Sie wahrscheinlich wissen, wenn ein Python-Skript und Eingabe ausgeführt wird:Wie gebe ich einen relativen Pfad zum Umleitungsoperator?

>> <file-name> 

eine Datei < Datei-Namen benannt> wird im Skript-Verzeichnis erstellt werden, und alle stdin Ausgabe dieses Skripts wird auf diese gerichtet werden Datei.

Ich möchte ein Feature im Skript hinzufügen, das (bei Verwendung des Umleitungsoperators) die Datei in einem anderen Verzeichnis meiner Wahl extrahiert. Weißt du, wie man es macht?

+0

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

Antwort

0

Geben Sie einfach den vollständigen Namen des Verzeichnisses an, in das Sie Ihre Ausgabe umleiten möchten.

echo hello world >> <full path of directory>/<name of output file> 
+0

Ja. Aber manchmal kann der Pfad zum gewünschten Verzeichnis sehr lang sein, daher ist es viel bequemer, eine Funktion zu haben, die es unterstützt. – CrazySynthax

0

Dateien werden relativ zum aktuellen Verzeichnis erstellt. Sie können os.chdir verwenden, um das aktuelle Verzeichnis zu ändern.

0

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).