Pythonでディレクトリを移動した状態で終了したい


よろしくお願いします。

通常、Pythonでディレクトリの移動は

[code]

    os.chdir('directory')
    
[/code]

でできますが、pythonスクリプト内でディレクトリを移動しても、そのスクリプトを終了したらディレクトリはスクリプトを起動した時のままになります。

[code]

    # pwd -> path/to/file
    os.chdir('foobar')
    # pwd -> path/to/file/foobar
    # この状態でスクリプトを終了すると、
    # pwd -> path/to/file のまま
    
[/code]

こういうことになります。

これを、スクリプトを終了しても **ディレクトリを移動した状態を保つ** ことはできるのでしょうか？

スクリプトを終了する時にあたらしくシェルを起動すれば、ディレクトリの移動は保たれますが、

[code]

    os.chdir('foobar') # pwd -> path/to/file/foobar
    os.system(os.environ["SHELL"]) 
    # path/to/file/foobar の状態でシェルが起動するので、結果的には意図した事ができる
    
[/code]

しかし設計的にこのシステムはよくないと思いますので（シェル変数が設定されていない場合もありますし）、何か解決術がありましたら、お教え頂けませんでしょうか。

よろしくお願いいたします。




Unix系OSについて書きます。  
Unixでは、親プロセスに限らず別プロセスのワーキングディレクトリを変更する一般的な方法はありません。  
どうしても行ないたければ、外部プロセスにアタッチしてシステムコールを実行することになると思います。  
OSによって方法が違うはずですが gdb などのツールを呼び出せば共通化出来るかも知れません。

シェルでのディレクトリ移動を効率化するようなツールを作りたいのでしたら、シェルの alias を使うとよいです。  
移動したいディレクトリを標準出力に出力する`python-script`というコマンドを作ったとすると  

[code]

    alias mycd='cd "$(python-script)"'
    
[/code]

としておけば、`mycd` の実行でシェルのワーキングディレクトリが変更されます。




Unix系OSについて書きます。  
Unixでは、親プロセスに限らず別プロセスのワーキングディレクトリを変更する一般的な方法はありません。  
どうしても行ないたければ、外部プロセスにアタッチしてシステムコールを実行することになると思います。  
OSによって方法が違うはずですが gdb などのツールを呼び出せば共通化出来るかも知れません。

シェルでのディレクトリ移動を効率化するようなツールを作りたいのでしたら、シェルの alias を使うとよいです。  
移動したいディレクトリを標準出力に出力する`python-script`というコマンドを作ったとすると  

[code]

    alias mycd='cd "$(python-script)"'
    
[/code]

としておけば、`mycd` の実行でシェルのワーキングディレクトリが変更されます。

