実現したいこと
GUIソフトでバックアップしたい物を選び、バックアップ先を指定し、バックアップの間隔を指定し情報が格納されてある.jsonを作成します。
そのjsonから情報を読み取り、バックアップソフトがバックグラウンドで指定された時間で定期的にバックアップするというものです。
発生している問題・分からないこと
環境
Windows10
Python3.11.8
VSCODE
VScodeで、デバックしている時は上手くいくのですがexe化していざ起動させるとうまくいかなくなります。GUIソフトはまた別ですがバックアップソフトは、パソコンが起動したらそのソフトも起動させたいため、バックグラウンド処理をさせたいです。
該当のソースコード
backup_script.py
1import json 2import os 3import shutil 4from datetime import datetime 5import schedule 6import time 7import tkinter as tk 8from tkinter import messagebox 9 10CONFIG_FILE_NAME = "backup_config.json" 11 12def get_application_path(): 13 """アプリケーション(スクリプト)が存在するディレクトリのパスを取得します。""" 14 return os.path.dirname(os.path.abspath(__file__)) 15 16def get_config_path(): 17 """設定ファイルのパスを取得します。""" 18 return os.path.join(get_application_path(), CONFIG_FILE_NAME) 19 20def load_config(): 21 """設定ファイルを読み込み、設定を返します。""" 22 config_path = get_config_path() 23 try: 24 with open(config_path, "r", encoding="utf-8") as config_file: 25 return json.load(config_file) 26 except FileNotFoundError: 27 # GUIではなくコンソールにエラーメッセージを表示 28 print("設定ファイルが見つかりません。") 29 return None 30 31def backup_files(config): 32 """設定に基づいてバックアップを実行します。""" 33 if not config: 34 return 35 36 items = config.get("backup_items", []) 37 destination_folder = config.get("destination_folder", "") 38 39 for item in items: 40 basename = os.path.basename(item) 41 timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") 42 destination_path = os.path.join(destination_folder, f"{basename}_{timestamp}") 43 44 try: 45 if os.path.isdir(item): 46 shutil.copytree(item, destination_path) 47 else: 48 shutil.copy2(item, destination_path) 49 print(f"バックアップ完了: {item} -> {destination_path}") 50 except Exception as e: 51 print(f"バックアップ失敗: {item}. エラー: {e}") 52 53def run_backup(): 54 """バックアップスケジュールを設定し、バックグラウンドで実行します。""" 55 config = load_config() 56 if not config: 57 return 58 59 backup_interval = config.get("backup_interval", 15) # デフォルトは15分 60 schedule.every(backup_interval).minutes.do(lambda: backup_files(config)) 61 62 print("バックアップスケジュールを開始します。バックグラウンドで実行中...") 63 while True: 64 schedule.run_pending() 65 time.sleep(1) 66 67if __name__ == "__main__": 68 run_backup()
試したこと・調べたこと
上記の詳細・結果
バックアップソフトが、格納された情報を探せてないのかと思い、同じフォルダ内から検索するようにしたが上手くいかずでした。
おそらく、バックグラウンドで起動させている時にうまくいかないのだろうと予想しますが、初心者なもので分からずじまいで質問させていただきます。
よろしくお願いいたします!
補足
特になし
0 コメント