Bei dem Versuch, a question for another user, stieß ich auf etwas zu beantworten, die meine Neugier geweckt:Kann das Verzeichnis geändert werden und die Änderung bleibt bestehen, wenn das Skript beendet wird?
import os
os.chdir('..')
Wird das Arbeitsverzeichnis ändern, soweit Python betrifft, so, wenn ich in /home/username/
, und ich laufe os.chdir('..')
, jeden weiteren Code wird funktionieren, als ob ich in /home/
bin. Zum Beispiel, wenn ich dann tun:
import glob
files = glob.glob('*.py')
files
wird eine Liste von .py
Dateien in /home/
anstatt in /home/username/
sein. Sobald das Skript jedoch beendet wird, bin ich wieder in /home/username/
oder in dem Verzeichnis, aus dem ich das Skript ursprünglich ausgeführt habe.
Ich habe gefunden, das gleiche passiert mit Shell-Skripten. Wenn ich das folgende Skript:
#!/bin/bash
cd /tmp
touch foo.txt
Ausführen des Skripts von /home/username/
wird eine Datei foo.txt
in /tmp/
erstellen, aber wenn das Skript beendet, werde ich immer noch in /home/username/
nicht /tmp/
sein.
Ich bin gespannt, ob es ein Grund ist, warum das Arbeitsverzeichnis nicht geändert wird „permanent“ in diesen Fällen und wenn es ist ein Weg, um es dauerhaft zu ändern, zum Beispiel ein Skript mit ~$ python myscript.py
zu laufen, und Lassen Sie das Terminal, von dem das Skript ausgeführt wurde, in einem anderen Verzeichnis enden, wenn das Skript beendet ist.
Das setzt voraus, dass jeder Benutzer, der die Skripts ausführt, weiß, dass es ihr Shell-Verzeichnis am Ende ändern wird, andernfalls wird das Verhalten ziemlich, wenn nicht ein wenig erstaunlich sein. –
@MosesKoledoye Ich habe das nicht berücksichtigt. Es wäre in der Tat sehr verwirrend und gefährlich, wenn der Benutzer nicht wüsste, was vor sich geht. Ich dachte an einen Fall, in dem der Benutzer das Verhalten wollte und erwartete. Vielleicht ist es Teil eines Workflows, in dem nach der Ausführung des Skripts etwas in der Shell, aber in einem anderen Verzeichnis ausgeführt werden muss, und das Skript speichert die Schritte, in denen es navigieren muss. – elethan
Und ich glaube, Skripte sollten mehr wie Sandboxes in Bezug auf den Terminal/Arbeitsbereich sein, außer natürlich gibt es eine IO-Operation oder eine Ausnahme wird geworfen. Gute Frage tho; dachte * voll *. –