Python で記述されたアプリケーションを、ユーザーのコンピューターの Program Files フォルダーにインストールされる exe として配布する必要があります。Program Files はデフォルトで書き込み禁止になっているため、Windows ではすべてのファイルを %APPDATA% フォルダーに保存する必要があります。そして、私はそれをやっています - 私はsettings.ini、settings_db.db、およびそこに作成された別のファイルを持っています。
ただし、Python のログ モジュールはログをそこに保存することを拒否し、代わりにルート ディレクトリに保存しているようです。これは私が持っているコードです:
currentPath = os.environ["APPDATA"] + "\\tools\\"
if not os.path.exists(currentPath):
try:
os.makedirs(os.environ["APPDATA"] + "\\tools\\")
currentPath = os.environ["APPDATA"] + "\\tools\\"
except:
currentPath = os.getcwd()
if not os.path.exists(currentPath + "ubc.log"):
open(currentPath + "ubc.log", "w").close()
print currentPath + "ubc.log"
#Let's define the logging "manager" as well as logging format...
logging.basicConfig(filename=currentPath + "ubc.log",
format='%(asctime)-15s: %(name)-18s - %(levelname)-8s - %(module)-15s - %(funcName)-20s - %(lineno)-6d - %(message)s',
level=logging.DEBUG)
logger = logging.getLogger("gui-log")
上記のprint
ステートメントは正しい結果を返しますC:\Users\Bogdan\AppData\Roaming\utools\ubc.log
。os.path.exists()
ファイルが存在しない場合、パーツはファイルを正常に作成します。しかし、ロガーはそこにログを記録しません。代わりに、.py
スクリプトが実行されたディレクトリ内のファイルにログを記録します。
それが問題かどうかはわかりませんが、以前は、filename="ubc.log"
そのファイルにログが記録されていましたが、このアプリケーションを配布する必要が生じたとき、それを変更しました。
誰にもアイデアはありますか?