2012-12-05 10 views
5

私は偶然、私は実際のディレクトリをPythonコード内から変更できないことを知りました。pythonでディレクトリを変更

from os import system 

def sh(script): 
    system("bash -c '%s'" % script) 

sh("cd /home") 
sh("pwd") 

pwdの出力が/homeではありませんが、上記のコードが住んでいるディレクトリ:次のように私のテスト・プログラムがあります。

これはなぜ起こるのか誰かが説明できますか?

+0

があなたの代わりに)(os.chdir使用する必要があります使用してPythonのプロセスを変更します。 –

答えて

6

問題は、シェルではなく、実際にos.chdir()

os.system()コールを使用してディレクトリを変更するコマンドを実行する新しいシェルに与えられたコマンドを実行していることです。これは2つの別々のシェルを起動します^

5

ディレクトリは実際にはに変更されていますが、別のプロセスではスクリプトの子であるが変更されています。子供が親の環境(PATH、CWDなど)に決して影響を与えることはできません。そのスクリプトの作業ディレクトリは全く影響されない -

+0

これは意味があります。ありがとう! – Tengis

3
sh("cd /home") 
sh("pwd") 

は、試してみてください。

sh("cd /home; pwd") 
1

sh()呼び出しは別のシェルを生成している、あなたはシェルの作業ディレクトリではなく、Pythonの者に影響を与えているよう。 pythons作業ディレクトリを変更するにはchdir()

2

sh関数を実行すると、新しいbashプロセスが生成され、現在のディレクトリが変更され、終了します。次に、最初のbashプロセスに何が起こったかについて何も知らない新しいプロセスを生成します。現在のディレクトリは、現在のユーザのホームディレクトリに設定されます。
は、現在の作業ディレクトリが

os.chdir("blah")` 
関連する問題