2017-03-21 18 views
1

私はこのようなことをpythonまたはbashで行います。ここで、プログラムは指定されたファイルパスを変換し、現在のシェルを移動します。作業ディレクトリをPythonまたはシェルスクリプトから変更する

ここ
ulka:~/scc/utils$ python prog.py some_path1 
ulka:some_path2$ 

some_path1 -> prog.py -> some_path2 

任意のアイデアが理解されるであろう、私はsubprocess.callまたはos.chdirてみましたが、それが動作していません。

+2

あなたはそれを行うことはできません。 'cd'が組み込まれています。 –

+1

あなたのpythonコードは、それ自身の子プロセスで動作します。それは親プロセスを 'cd'できません –

答えて

2

pythonは独自のプロセスで動作するため、シェルの現在のディレクトリを変更することはできません。しかし、あなたはこのような何かを行うことができます:

change_path() { 
    # prog.py figures out the real path that you want and prints 
    # it to standard output 
    local new_path=$(python prog.py some_path1) # could use an argument "$1" 
    cd "$new_path" 
} 
+0

すばらしい、私はこの考えが好きです。 – Ulka

+0

近い不可能な問題のための素晴らしい解決策。あなたがそれが最高のものだと思えば@Ulkaは答えを受け入れます。 –

1

あなたがsourceまたは.でそれを実行した場合、シェルスクリプトがシェルの現在の作業ディレクトリを変更することが可能です。このようにスクリプトを実行すると、cdコマンドだけで十分です。 sourceまたは.のないシェルスクリプトを実行している場合、またはシェルスクリプト以外のものを実行している場合は、それを行うには良い方法はありません。デバッガで処理してください(お勧めしませんが、実際にこれを行う必要がある場合はHow do I set the working directory of the parent process?および/またはhttps://unix.stackexchange.com/questions/281994/changing-the-current-working-directory-of-a-certain-processを参照してください)。

関連する問題