subprocess.Popen einfacher Code erlaubt mir nicht, eine CD durchzuführen (Verzeichnis wechseln)

8

Ich versuche ein Python-Skript zu verwenden, um das Verzeichnis zu ändern, aber ich erhalte einen Fehler.

Der Python-Code:

%Vor%

Ich bekomme diesen Fehler:

%Vor%

Was bedeutet der Fehler, was mache ich falsch und wie ändere ich das Verzeichnis in einem Python-Subprozess?

    
Eric Leschinski 11.06.2014, 11:12
quelle

2 Antworten

8
%Vor%

Ohne shell=True (was eine Shell emuliert)

%Vor%

Sie können das Verzeichnis nicht ändern, wenn Sie es nicht über:

tun %Vor%

Das Problem ist also nicht, dass der Pfad ~ nicht existiert, sondern cd als Option im emulierten Terminal von Python nicht existiert. Wird direkt an eine tatsächliche Shell übergeben, funktioniert cd . Aber beachte, dass shell=True ein Risiko ist, benutze es nie, es sei denn, du musst es tun.
Verwenden Sie stattdessen os.chdir .

Ein Arbeitsszenario:

%Vor%

Ergebnis:

%Vor%

Beachten Sie, dass ich die Shell in ~ gestartet habe und via os.chdir sie in tmp geändert habe und tatsächlich den Inhalt meines tmp-Verzeichnisses erhalten habe.

Erklärung der Shells und Befehle:

Ein Shell-Befehl ist etwas, das in die Shell eingebaut ist, während ein normaler alter Befehl unter /bin zu finden ist, zum Beispiel:

%Vor%

Wo 7z ein Befehl ist, den ich tatsächlich ausführen kann:

%Vor%

Während zum Beispiel cd ein eingebauter Shell-Befehl ist, etwas, das Sie nicht unter /bin finden, aber trotzdem in den meisten "Terminals" funktioniert (mit einer Shell), weil es (wie erwähnt) in die Shell eingebaut ist Sie sehen normalerweise.

Aber weil Python eine Shell emuliert gibt es nur einen bestimmten Satz von Befehlen, die eingebaut sind und funktionieren, cd ist einer von denen, die Sie nicht kompensieren können, können Sie os.chdir(...) verwenden um die exakt gleiche Funktion auszuführen und beeinflusst das gesamte Programm.

    
Torxed 11.06.2014, 11:14
quelle
1

cd ist ein eingebauter Befehl der Shell, der die Umgebung der Shell so ändert, dass das aktuelle Verzeichnis der nächsten Befehle aufgerufen wird. Es ist nicht ein reguläres Programm. So kann es nicht als Subprozess mit Popen aufgerufen werden.

Der richtige Weg, um das aktuelle Verzeichnis in Python zu ändern, ist:

%Vor%     
Xavier Combelle 11.06.2014 11:24
quelle

Tags und Links