例えば、
/hoge/1/
にいる状態で、
python hoge.py
os.chdir('/hoge/2/');
としても、
shellに戻ると/hoge/1/にいるままだと思いますが、
/hoge/2/にいる状態にしたいのです。
親プロセスとなるプログラム(この場合は、Python を呼び出したシェルプログラム)側に仕掛けを用意しないと無理だと思います。
シェル側の仕掛けを用意したやり方は、下記のページにありました。
教えて!Ziddyちゃん - Linuxのchdir(カレントディレクトリが移動できない)
Python ではなく、C で書かれていますが、
という流れになります。
上記の例だと、親プロセスがシェルじゃなかったら、といった問題もありますので、もう少し工夫が必要だとは思いますが、何れにしても、呼び出す側にも仕掛けが必要なので、汎用的な手法とは言い難いです。
そもそも、カレントディレクトリはプロセス毎に保持しているものなので、もし、Python スクリプト中で変更したカレントディレクトリが、呼び出し元のシェルのカレントディレクトリに反映されるとなると、他のプロセスが保持しているデータを書き換える事ができる、という事を意味します。これが可能だとすれば、前述のように前もって双方に仕掛けを用意するか、カーネル自体に特別な仕掛けを作るしかないと思います。
http://www.linux.or.jp/JF/JFdocs/The-Linux-Kernel-6.html
これは不可能です。
あるプロセスから他のプロセスのcwdを変更することはできません。
シェルからpythonスクリプトを実行すると、シェルのプロセスの子プロセスとしてpythonプロセスができます。
親子プロセスとはいえ、それぞれ別々のプロセスになります。そのため、プロセス間通信以外では通信できません。
また、シェルのプロセスが親プロセスである場合、共有している標準入出力か、シグナル以外では子プロセスから
通信できないです。(または特定パスにあるファイルにメッセージを書いて伝える、とか)
いずれの場合もシェル側でハンドルするようにあらかじめなんらかの仕掛けが要ります。
trapでシグナル受け取り時の動作を定義しておくとか、コマンドの標準出力を読み取って、その内容に応じて何かを実行するとか。
普通にpython hoge.pyって実行するだけでcwdを変更することはできません。
コメント(0件)