更新清理工具
This commit is contained in:
62
clean.py
62
clean.py
@@ -1,6 +1,6 @@
|
|||||||
import os
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
from loguru import logger as log as log
|
from loguru import logger
|
||||||
import argparse
|
import argparse
|
||||||
from typing import List, Tuple, Set
|
from typing import List, Tuple, Set
|
||||||
import time
|
import time
|
||||||
@@ -28,7 +28,7 @@ def parse_args() -> argparse.Namespace:
|
|||||||
help='清理 .pytest_cache 目录')
|
help='清理 .pytest_cache 目录')
|
||||||
parser.add_argument('--exclude', type=str, default="",
|
parser.add_argument('--exclude', type=str, default="",
|
||||||
help='排除的目录,多个目录用逗号分隔')
|
help='排除的目录,多个目录用逗号分隔')
|
||||||
parser.add_argument('--log-file',
|
parser.add_argument('--logger-file',
|
||||||
help='指定日志文件路径')
|
help='指定日志文件路径')
|
||||||
parser.add_argument('--dry-run', action='store_true',
|
parser.add_argument('--dry-run', action='store_true',
|
||||||
help='仅列出将要删除的文件,不实际删除')
|
help='仅列出将要删除的文件,不实际删除')
|
||||||
@@ -69,7 +69,7 @@ def get_excluded_dirs(exclude_arg: str) -> Set[str]:
|
|||||||
|
|
||||||
def clean_pycache(root_dir: str, exclude_dirs: Set[str], dry_run: bool = False) -> List[str]:
|
def clean_pycache(root_dir: str, exclude_dirs: Set[str], dry_run: bool = False) -> List[str]:
|
||||||
"""清理 __pycache__ 目录"""
|
"""清理 __pycache__ 目录"""
|
||||||
log.info("开始清理 __pycache__ 目录pass")
|
logger.info("开始清理 __pycache__ 目录pass")
|
||||||
cleaned_paths = []
|
cleaned_paths = []
|
||||||
|
|
||||||
for dirpath, dirnames, _ in os.walk(root_dir):
|
for dirpath, dirnames, _ in os.walk(root_dir):
|
||||||
@@ -84,13 +84,13 @@ def clean_pycache(root_dir: str, exclude_dirs: Set[str], dry_run: bool = False)
|
|||||||
if success:
|
if success:
|
||||||
cleaned_paths.append(pycache_dir)
|
cleaned_paths.append(pycache_dir)
|
||||||
else:
|
else:
|
||||||
log.error(f"无法清理 {pycache_dir}: {error}")
|
logger.error(f"无法清理 {pycache_dir}: {error}")
|
||||||
|
|
||||||
return cleaned_paths
|
return cleaned_paths
|
||||||
|
|
||||||
def clean_pyc_files(root_dir: str, exclude_dirs: Set[str], dry_run: bool = False) -> List[str]:
|
def clean_pyc_files(root_dir: str, exclude_dirs: Set[str], dry_run: bool = False) -> List[str]:
|
||||||
"""清理 .pyc 文件"""
|
"""清理 .pyc 文件"""
|
||||||
log.info("开始清理 .pyc 文件pass")
|
logger.info("开始清理 .pyc 文件pass")
|
||||||
cleaned_files = []
|
cleaned_files = []
|
||||||
|
|
||||||
for dirpath, dirnames, filenames in os.walk(root_dir):
|
for dirpath, dirnames, filenames in os.walk(root_dir):
|
||||||
@@ -106,13 +106,13 @@ def clean_pyc_files(root_dir: str, exclude_dirs: Set[str], dry_run: bool = False
|
|||||||
if success:
|
if success:
|
||||||
cleaned_files.append(file_path)
|
cleaned_files.append(file_path)
|
||||||
else:
|
else:
|
||||||
log.error(f"无法清理 {file_path}: {error}")
|
logger.error(f"无法清理 {file_path}: {error}")
|
||||||
|
|
||||||
return cleaned_files
|
return cleaned_files
|
||||||
|
|
||||||
def clean_pytest_cache(root_dir: str, exclude_dirs: Set[str], dry_run: bool = False) -> List[str]:
|
def clean_pytest_cache(root_dir: str, exclude_dirs: Set[str], dry_run: bool = False) -> List[str]:
|
||||||
"""清理 .pytest_cache 目录"""
|
"""清理 .pytest_cache 目录"""
|
||||||
log.info("开始清理 .pytest_cache 目录pass")
|
logger.info("开始清理 .pytest_cache 目录pass")
|
||||||
cleaned_paths = []
|
cleaned_paths = []
|
||||||
|
|
||||||
for dirpath, dirnames, _ in os.walk(root_dir):
|
for dirpath, dirnames, _ in os.walk(root_dir):
|
||||||
@@ -127,26 +127,26 @@ def clean_pytest_cache(root_dir: str, exclude_dirs: Set[str], dry_run: bool = Fa
|
|||||||
if success:
|
if success:
|
||||||
cleaned_paths.append(cache_dir)
|
cleaned_paths.append(cache_dir)
|
||||||
else:
|
else:
|
||||||
log.error(f"无法清理 {cache_dir}: {error}")
|
logger.error(f"无法清理 {cache_dir}: {error}")
|
||||||
|
|
||||||
return cleaned_paths
|
return cleaned_paths
|
||||||
|
|
||||||
def clean_nicegui(root_dir: str, dry_run: bool = False) -> Tuple[bool, str]:
|
def clean_nicegui(root_dir: str, dry_run: bool = False) -> Tuple[bool, str]:
|
||||||
"""清理 .nicegui 目录"""
|
"""清理 .nicegui 目录"""
|
||||||
log.info("开始清理 .nicegui 目录pass")
|
logger.info("开始清理 .nicegui 目录pass")
|
||||||
nicegui_dir = os.path.join(root_dir, ".nicegui")
|
nicegui_dir = os.path.join(root_dir, ".nicegui")
|
||||||
if os.path.exists(nicegui_dir) and os.path.isdir(nicegui_dir):
|
if os.path.exists(nicegui_dir) and os.path.isdir(nicegui_dir):
|
||||||
success, error = safe_remove(nicegui_dir, dry_run)
|
success, error = safe_remove(nicegui_dir, dry_run)
|
||||||
if success:
|
if success:
|
||||||
return True, nicegui_dir
|
return True, nicegui_dir
|
||||||
else:
|
else:
|
||||||
log.error(f"无法清理 {nicegui_dir}: {error}")
|
logger.error(f"无法清理 {nicegui_dir}: {error}")
|
||||||
return False, nicegui_dir
|
return False, nicegui_dir
|
||||||
return False, nicegui_dir
|
return False, nicegui_dir
|
||||||
|
|
||||||
def clean_testdb(root_dir: str, dry_run: bool = False) -> Tuple[bool, str, str]:
|
def clean_testdb(root_dir: str, dry_run: bool = False) -> Tuple[bool, str, str]:
|
||||||
"""清理测试数据库文件"""
|
"""清理测试数据库文件"""
|
||||||
log.info("开始清理 test.db 文件pass")
|
logger.info("开始清理 test.db 文件pass")
|
||||||
test_db = os.path.join(root_dir, "test.db")
|
test_db = os.path.join(root_dir, "test.db")
|
||||||
if os.path.exists(test_db) and os.path.isfile(test_db):
|
if os.path.exists(test_db) and os.path.isfile(test_db):
|
||||||
success, error = safe_remove(test_db, dry_run)
|
success, error = safe_remove(test_db, dry_run)
|
||||||
@@ -163,23 +163,19 @@ def main():
|
|||||||
exclude_dirs = get_excluded_dirs(args.exclude)
|
exclude_dirs = get_excluded_dirs(args.exclude)
|
||||||
|
|
||||||
# 设置日志文件
|
# 设置日志文件
|
||||||
if args.log_file:
|
if args.logger_file:
|
||||||
log.set_log_file(args.log_file)
|
logger.set_logger_file(args.logger_file)
|
||||||
|
|
||||||
log.title()
|
|
||||||
log.title(title=f"清理工具 Cleaner\t\tVersion:{Version}", size="h2")
|
|
||||||
print('')
|
|
||||||
|
|
||||||
if not os.path.exists(root_dir):
|
if not os.path.exists(root_dir):
|
||||||
log.error(f"目录不存在 Directory not exists: {root_dir}")
|
logger.error(f"目录不存在 Directory not exists: {root_dir}")
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
log.info(f"清理目录 Clean Directory: {root_dir}")
|
logger.info(f"清理目录 Clean Directory: {root_dir}")
|
||||||
if args.dry_run:
|
if args.dry_run:
|
||||||
log.warning("模拟运行模式: 将只列出要删除的文件,不会实际删除")
|
logger.warning("模拟运行模式: 将只列出要删除的文件,不会实际删除")
|
||||||
|
|
||||||
if exclude_dirs:
|
if exclude_dirs:
|
||||||
log.info(f"排除目录: {', '.join(exclude_dirs)}")
|
logger.info(f"排除目录: {', '.join(exclude_dirs)}")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
total_cleaned = 0
|
total_cleaned = 0
|
||||||
@@ -188,55 +184,55 @@ def main():
|
|||||||
if not args.no_pycache and confirm_action("是否清理 __pycache__ 目录?", args.yes):
|
if not args.no_pycache and confirm_action("是否清理 __pycache__ 目录?", args.yes):
|
||||||
cleaned = clean_pycache(root_dir, exclude_dirs, args.dry_run)
|
cleaned = clean_pycache(root_dir, exclude_dirs, args.dry_run)
|
||||||
for path in cleaned:
|
for path in cleaned:
|
||||||
log.info(f"已清理 Removed: {path}")
|
logger.info(f"已清理 Removed: {path}")
|
||||||
total_cleaned += len(cleaned)
|
total_cleaned += len(cleaned)
|
||||||
|
|
||||||
# 清理 .pyc 文件
|
# 清理 .pyc 文件
|
||||||
if args.pyc and confirm_action("是否清理 .pyc 文件?", args.yes):
|
if args.pyc and confirm_action("是否清理 .pyc 文件?", args.yes):
|
||||||
cleaned = clean_pyc_files(root_dir, exclude_dirs, args.dry_run)
|
cleaned = clean_pyc_files(root_dir, exclude_dirs, args.dry_run)
|
||||||
for path in cleaned:
|
for path in cleaned:
|
||||||
log.info(f"已清理 Removed: {path}")
|
logger.info(f"已清理 Removed: {path}")
|
||||||
total_cleaned += len(cleaned)
|
total_cleaned += len(cleaned)
|
||||||
|
|
||||||
# 清理 .pytest_cache
|
# 清理 .pytest_cache
|
||||||
if args.pytest_cache and confirm_action("是否清理 .pytest_cache 目录?", args.yes):
|
if args.pytest_cache and confirm_action("是否清理 .pytest_cache 目录?", args.yes):
|
||||||
cleaned = clean_pytest_cache(root_dir, exclude_dirs, args.dry_run)
|
cleaned = clean_pytest_cache(root_dir, exclude_dirs, args.dry_run)
|
||||||
for path in cleaned:
|
for path in cleaned:
|
||||||
log.info(f"已清理 Removed: {path}")
|
logger.info(f"已清理 Removed: {path}")
|
||||||
total_cleaned += len(cleaned)
|
total_cleaned += len(cleaned)
|
||||||
|
|
||||||
# 清理 .nicegui
|
# 清理 .nicegui
|
||||||
if not args.no_nicegui and confirm_action("是否清理 .nicegui 目录?", args.yes):
|
if not args.no_nicegui and confirm_action("是否清理 .nicegui 目录?", args.yes):
|
||||||
cleaned, path = clean_nicegui(root_dir, args.dry_run)
|
cleaned, path = clean_nicegui(root_dir, args.dry_run)
|
||||||
if cleaned:
|
if cleaned:
|
||||||
log.info(f"已清理 Removed: {path}")
|
logger.info(f"已清理 Removed: {path}")
|
||||||
total_cleaned += 1
|
total_cleaned += 1
|
||||||
else:
|
else:
|
||||||
log.debug(f"未找到 Not found: {path}")
|
logger.debug(f"未找到 Not found: {path}")
|
||||||
|
|
||||||
# 清理 test.db
|
# 清理 test.db
|
||||||
if not args.no_testdb and confirm_action("是否清理 test.db 文件?", args.yes):
|
if not args.no_testdb and confirm_action("是否清理 test.db 文件?", args.yes):
|
||||||
success, path, error = clean_testdb(root_dir, args.dry_run)
|
success, path, error = clean_testdb(root_dir, args.dry_run)
|
||||||
if success:
|
if success:
|
||||||
log.info(f"已清理 Removed: {path}")
|
logger.info(f"已清理 Removed: {path}")
|
||||||
total_cleaned += 1
|
total_cleaned += 1
|
||||||
elif error == "文件不存在":
|
elif error == "文件不存在":
|
||||||
log.debug(f"未找到 Not found: {path}")
|
logger.debug(f"未找到 Not found: {path}")
|
||||||
else:
|
else:
|
||||||
log.error(f"清理失败 Failed: {error}")
|
logger.error(f"清理失败 Failed: {error}")
|
||||||
|
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
log.warning("操作被用户中断")
|
logger.warning("操作被用户中断")
|
||||||
return 1
|
return 1
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
log.error(f"错误 Error: {e}")
|
logger.error(f"错误 Error: {e}")
|
||||||
return 1
|
return 1
|
||||||
else:
|
else:
|
||||||
elapsed_time = time.time() - start_time
|
elapsed_time = time.time() - start_time
|
||||||
if args.dry_run:
|
if args.dry_run:
|
||||||
log.success(f"模拟清理结束,发现 {total_cleaned} 个可清理项目 (用时: {elapsed_time:.2f}秒)")
|
logger.success(f"模拟清理结束,发现 {total_cleaned} 个可清理项目 (用时: {elapsed_time:.2f}秒)")
|
||||||
else:
|
else:
|
||||||
log.success(f"清理结束,共清理 {total_cleaned} 个项目 (用时: {elapsed_time:.2f}秒)")
|
logger.success(f"清理结束,共清理 {total_cleaned} 个项目 (用时: {elapsed_time:.2f}秒)")
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|||||||
Reference in New Issue
Block a user