1. ホーム
  2. パイソン

[解決済み】python: スクリプトの作業ディレクトリをスクリプト自身のディレクトリに変更する

2022-04-12 15:32:13

質問

crontabから1分ごとにpythonシェルを実行しています。

* * * * * /home/udi/foo/bar.py

/home/udi/foo のように、必要なサブディレクトリがいくつかあります。 /home/udi/foo/log/home/udi/foo/config は、どの /home/udi/foo/bar.py を参照しています。

問題は、その crontab は別の作業ディレクトリからスクリプトを実行するので ./log/bar.log は失敗します。

作業ディレクトリをスクリプト自身のディレクトリに変更するようにスクリプトに指示する良い方法はないでしょうか?スクリプトに明示的に場所を教えるのではなく、どのスクリプトの場所でも動作するような解決策を空想しています。

EDITです。

os.chdir(os.path.dirname(sys.argv[0]))

最もコンパクトでエレガントな解決策でした。ご回答とご説明をありがとうございました。

どのように解決するのですか?

相対パスを開けるように、現在の作業ディレクトリを変更します。

import os
os.chdir("/home/udi/foo")

しかし、Pythonスクリプトを書くときにどのようなディレクトリになるかわからない場合でも、どのようにすればPythonスクリプトのあるディレクトリに変更できるかという質問がありました。 これを行うには os.path という関数があります。

import os

abspath = os.path.abspath(__file__)
dname = os.path.dirname(abspath)
os.chdir(dname)

これは、スクリプトのファイル名を受け取り、それを絶対パスに変換し、そのパスのディレクトリを抽出し、そのディレクトリに変更します。