Python で configobj を使用しているときに、パスに少し問題があります。ヘルパー ファイルで絶対パスを使用しない方法があるかどうか疑問に思っています。たとえば、次の代わりに:
self.config = ConfigObj('/home/thisuser/project/common/config.cfg')
私は次のようなものを使いたい:
self.config = ConfigObj(smartpath+'/project/common/config.cfg')
背景: 構成ファイルを、ヘルパー クラスとユーティリティ クラスと一緒に共通のディレクトリに配置しました。
common/config.cfg
common/helper.py
common/utility.py
ヘルパー クラスには、config のセクション内の値を返すメソッドがあります。コードは次のとおりです。
from configobj import ConfigObj
class myHelper:
def __init__(self):
self.config = ConfigObj('/home/thisuser/project/common/config.cfg')
def send_minion(self, race, weapon):
minion = self.config[race][weapon]
return minion
ユーティリティ ファイルはヘルパー ファイルをインポートし、ユーティリティ ファイルはプロジェクトのさまざまなフォルダーに配置された一連のさまざまなクラスによって呼び出されます。
from common import myHelper
class myUtility:
def __init__(self):
self.minion = myHelper.myHelper()
def attack_with_minion(self, race, weapon)
my_minion = self.minion.send_minion(race, weapon)
#... some common code used by all
my_minion.login()
次のファイルは、ユーティリティ ファイルをインポートし、メソッドを呼び出します。
/home/thisuser/project/folder1/forestCastle.py
/home/thisuser/project/folder2/secondLevel/sandCastle.py
/home/thisuser/project/folder3/somewhere/waterCastle.py
self.common.attack_with_minion("ogre", "club")
絶対パスを使用せずに forestCastle.py を実行すると、/home/thisuser/project/folder1/で構成が検索され、/home/thisuserが変更されるため、 project/common/で検索する必要があります。