2012-03-31 15 views
2

私はcwdを目的のディレクトリに変更するPythonスクリプトを作成しようとしています。私はPythonからこの作業を直接行うことができませんでしたので、私は単純なbatchスクリプトを書いてそれを行いました。Pythonを使用してコマンドプロンプトで現在の作業ディレクトリを変更します

Changedir.bat

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

私は私のcmdに直接上記のスクリプトを実行すると、私は何も起こりませんPythonスクリプトでそれを実行しようとするとそれが正常に動作しますが。私のcwdは同じままです。もちろん

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

実行する必要があるタスクのために作業ディレクトリを変更したい場合は、特定の作業ディレクトリが必要です。[Python:Windowsコマンドラインシェルの現在のディレクトリを変更することは可能ですか?実際の現在のディレクトリを変更しますか?](http://stackoverflow.com/questions/4881312/) –

+0

関連:[Perlの呼び出し元の作業ディレクトリの変更](http://stackoverflow.com/questions/5955389/) * "不可能"は超厳密に真実ではありません。* –

答えて

3

コマンドプロンプトでディレクトリを変更する場合は、cdまたは.batのいずれかのスクリプトを使用する必要があります。

別のプロセスで作成されたカレントディレクトリへの変更が親プロセスに反映されないため、別のプロセス(Pythonなど)を作成することはできません。 .batスクリプトが動作する理由は、子プロセスではなく呼び出すコマンドシェルによって処理されるためです。

5

subprocess.callは、スクリプトのためのまったく新しいプロセスを生成しているため、これは、動作しないことができます。これにより、完全に別の環境でスクリプトが実行されます。

+0

それでは、代替案とは何ですか? @albergeの回答への私のコメントを参照してください。 – RanRag

+0

私はUnixのプロセスしか知りませんが、これはどこでも同じように動作します。あなたがプロセスを本当に理解していれば、これは簡単にはできないことを発見する必要があります。あなたが望むのは、python(=新しいプロセス=独自の環境=独自のcwd)を起動し、そこで(cwdを変更して)(pythonプロセスで)exitし、cmdプロセスに戻り、cwdを変更することを期待します。 – tchap

関連する問題