2012-03-31 11 views
2

Ich versuche, ein Python-Skript zu schreiben, das meine cwd in das gewünschte Verzeichnis ändern wird. Ich war nicht in der Lage, diese Aufgabe direkt von Python zu tun, also schrieb ich ein einfaches batch Skript, um das zu tun.Ändern Sie das aktuelle Arbeitsverzeichnis in der Eingabeaufforderung mit Python

Changedir.bat

@echo off 
chdir /D F:\cygwin\home\ 

Wenn ich führen Sie das obige Skript direkt in meinem cmd es funktioniert gut, aber wenn ich versuche, kommt es mit einem Python-Skript nichts auszuführen. Mein cwd bleibt gleich.

PythonScript.py

import shlex,subprocess 

change_dir = r'cmd.exe /c C:\\Users\\test.bat' 
command_change = shlex.split(change_dir) 
subprocess.call(command_change) 
+0

Wenn Sie das Arbeitsverzeichnis wegen einer Aufgabe ändern möchten, die Sie brauchen, um ein bestimmtes Arbeitsverzeichnis zu erstellen, dann erfahren Sie, wie Sie dies in [Python: Ist es möglich, die Windows-Befehlszeile aktuelle Shell-Verzeichnis ohne zu ändern Ändern des aktuellen Verzeichnisses?] (http://stackoverflow.com/questions/4881312/) –

+0

Related: [Perl Arbeitsverzeichnis des Anrufers ändern] (http://StackOverflow.com/Questions/5955389/), mit interessanten Aussage * "Nicht möglich" ist nicht absolut streng. * –

Antwort

3

Wenn Sie das Verzeichnis an der Eingabeaufforderung ändern möchten, müssen Sie entweder cd oder ein .bat Skript verwenden.

Sie können keinen anderen Prozess (z. B. Python) dazu aufrufen, da Änderungen am aktuellen Verzeichnis, die in einem anderen Prozess vorgenommen wurden, nicht zum übergeordneten Prozess zurückreflektiert werden. Der Grund dafür, dass das .bat-Skript funktioniert, ist, dass es von der Befehlsshell verarbeitet wird, die es aufruft, und nicht von einem untergeordneten Prozess.

5

Natürlich ist dies nicht funktionieren kann, weil subprocess.call für Ihr Skript ganz neuen Prozess Laichen. Dies führt das Skript in einer vollständig separaten Umgebung aus.

+0

Also, was ist die Alternative.? Siehe meinen Kommentar zu @alberge Antwort. – RanRag

+0

Ich kenne nur Unix-Prozesse, aber ich denke, das funktioniert überall mehr oder weniger gleich. Wenn Sie Prozesse wirklich verstehen, müssen Sie feststellen, dass dies nicht ohne weiteres möglich ist (wahrscheinlich überhaupt nicht). Was Sie wollen, ist Python zu starten (= neuer Prozess = seine eigene Umgebung = seine eigene cwd), dann cwd dort ändern (im Python-Prozess), dann beenden, zurück zu Ihrem cmd-Prozess und erwarten, dass es seine cwd geändert hat. – tchap

Verwandte Themen