ほぼ中立ブログ

少しだけ趣味に偏った雑記ブログ

Pythonでディレクトリを一時的に移動して元のディレクトリに戻る

Pythonスクリプト内で外部プログラムを呼び出して解析を実行することが多々あるのですが、プログラムの中には出力先を指定するオプションがなくカレントディレクトリに結果を出力することを想定しているものがあります。

条件が一つだけの場合はそれで良いのですが、わざわざPythonを使って別のプログラムを呼び出そうとしているときは、複数の条件を一度に実行したいという場合が多いです。

そのためこのような場合は、条件ごとに解析ディレクトリを作りPythonスクリプト内でそこに移動し、プログラムを実行するという処理が必要になります。面倒ですね

そこで今回はPythonを使ってディレクトリを移動する方法と、最後に実行時のディレクトリに帰ってくる方法を備忘録を兼ねてまとめました。

カレントディレクトリを調べる

実行時のカレントディレクトリを取得し最後に帰ってこられるようにします。osモジュールのgetcwd関数を使うと簡単に調べられます。

>>> import os
>>> # /home/userにいるとする
... os.getcwd()
'/home/user'

あとはこれを適当な変数に記憶させるだけです。

ディレクトリを移動する

Pythonスクリプト内でディレクトリを移動する場合は、osモジュールのchdir関数を使うと簡単です。

... 上の続き
>>> os.chdir("..")
>>> os.getcwd()
'/home'

コード

以上をまとめて今回作りたかった外部プログラム呼び出しのために一時的にディレクトリを移動し、実行後始めのディレクトリに戻ってくるスクリプトは以下の通りです。

#!/usr/bin/python3

import os
import subprocess

def main(indir):
    cwd = os.getcwd()
    print(cwd)
    os.chdir(indir)
    cmd = "pwd"
    subprocess.call(cmd)
    os.chdir(cwd)
    subprocess.call(cmd)

if __name__ == "__main__":
    dest = "/bin"
    main(dest)

このスクリプトを上と同じく"/home/user"で実行すると出力結果は以下の通りになります。

/home/user
/bin
/home/user

期待通りディレクトリを移動することができました。後は任意のプログラムを実行するだけです。

最後までお読みいただきありがとうございました。