#!/usr/bin/env python3 """ 用户学习行为数据导出封装脚本 支持命令行传参,无需修改原脚本变量 使用方式: 1. 导出单个角色:python export_learning_data.py --role 14607 2. 导出多个角色:python export_learning_data.py --role 14607 --role 14608 --role 14609 3. 导出单个账户:python export_learning_data.py --account 2148 4. 导出多个账户:python export_learning_data.py --account 2148 --account 2149 --account 2150 """ import argparse import os import sys import tempfile # 原脚本路径 ORIGIN_SCRIPT = "business_knowledge/git_scripts/export_user_id_data.py" def main(): parser = argparse.ArgumentParser(description='用户学习行为数据导出工具') group = parser.add_mutually_exclusive_group(required=True) group.add_argument('--role', action='append', type=int, help='角色ID,可多次指定多个') group.add_argument('--account', action='append', type=int, help='账户ID,可多次指定多个') args = parser.parse_args() # 读取原脚本内容 with open(ORIGIN_SCRIPT, 'r', encoding='utf-8') as f: content = f.read() # 替换变量配置 if args.role: if len(args.role) == 1: # 单个角色 new_content = content.replace( 'USER_ID = None # 单个角色ID,示例:2911', f'USER_ID = {args.role[0]} # 单个角色ID,示例:2911' ).replace( 'USER_ID_LIST = None # 角色ID列表,示例:[2911, 2912, 2913]', 'USER_ID_LIST = None # 角色ID列表,示例:[2911, 2912, 2913]' ).replace( 'ACCOUNT_ID_LIST = None # 5095[7232] # [1783,5375,5371,5345,5303,5293,5095,4289,4494,4473,4460,4452,4386,4388,4236,4043,2758,2841,2756,2750,2692,1781,1693,2256,2234,2373] # 账户ID列表,示例:[100, 101, 102]', 'ACCOUNT_ID_LIST = None # 5095[7232] # [1783,5375,5371,5345,5303,5293,5095,4289,4494,4473,4460,4452,4386,4388,4236,4043,2758,2841,2756,2750,2692,1781,1693,2256,2234,2373] # 账户ID列表,示例:[100, 101, 102]' ) else: # 多个角色 new_content = content.replace( 'USER_ID = None # 单个角色ID,示例:2911', 'USER_ID = None # 单个角色ID,示例:2911' ).replace( 'USER_ID_LIST = None # 角色ID列表,示例:[2911, 2912, 2913]', f'USER_ID_LIST = {args.role} # 角色ID列表,示例:[2911, 2912, 2913]' ).replace( 'ACCOUNT_ID_LIST = None # 5095[7232] # [1783,5375,5371,5345,5303,5293,5095,4289,4494,4473,4460,4452,4386,4388,4236,4043,2758,2841,2756,2750,2692,1781,1693,2256,2234,2373] # 账户ID列表,示例:[100, 101, 102]', 'ACCOUNT_ID_LIST = None # 5095[7232] # [1783,5375,5371,5345,5303,5293,5095,4289,4494,4473,4460,4452,4386,4388,4236,4043,2758,2841,2756,2750,2692,1781,1693,2256,2234,2373] # 账户ID列表,示例:[100, 101, 102]' ) else: if len(args.account) == 1: # 单个账户 new_content = content.replace( 'USER_ID = None # 单个角色ID,示例:2911', 'USER_ID = None # 单个角色ID,示例:2911' ).replace( 'USER_ID_LIST = None # 角色ID列表,示例:[2911, 2912, 2913]', 'USER_ID_LIST = None # 角色ID列表,示例:[2911, 2912, 2913]' ).replace( 'ACCOUNT_ID_LIST = None # 5095[7232] # [1783,5375,5371,5345,5303,5293,5095,4289,4494,4473,4460,4452,4386,4388,4236,4043,2758,2841,2756,2750,2692,1781,1693,2256,2234,2373] # 账户ID列表,示例:[100, 101, 102]', f'ACCOUNT_ID_LIST = {args.account} # 5095[7232] # [1783,5375,5371,5345,5303,5293,5095,4289,4494,4473,4460,4452,4386,4388,4236,4043,2758,2841,2756,2750,2692,1781,1693,2256,2234,2373] # 账户ID列表,示例:[100, 101, 102]' ) else: # 多个账户 new_content = content.replace( 'USER_ID = None # 单个角色ID,示例:2911', 'USER_ID = None # 单个角色ID,示例:2911' ).replace( 'USER_ID_LIST = None # 角色ID列表,示例:[2911, 2912, 2913]', 'USER_ID_LIST = None # 角色ID列表,示例:[2911, 2912, 2913]' ).replace( 'ACCOUNT_ID_LIST = None # 5095[7232] # [1783,5375,5371,5345,5303,5293,5095,4289,4494,4473,4460,4452,4386,4388,4236,4043,2758,2841,2756,2750,2692,1781,1693,2256,2234,2373] # 账户ID列表,示例:[100, 101, 102]', f'ACCOUNT_ID_LIST = {args.account} # 5095[7232] # [1783,5375,5371,5345,5303,5293,5095,4289,4494,4473,4460,4452,4386,4388,4236,4043,2758,2841,2756,2750,2692,1781,1693,2256,2234,2373] # 账户ID列表,示例:[100, 101, 102]' ) # 写入临时脚本并执行 with tempfile.NamedTemporaryFile(mode='w', suffix='.py', encoding='utf-8', delete=False) as f: f.write(new_content) temp_path = f.name try: # 执行脚本 exit_code = os.system(f'python3 {temp_path}') sys.exit(exit_code) finally: # 清理临时文件 os.unlink(temp_path) if __name__ == '__main__': main()