import argparse import asyncio import sys from loguru import logger from automaton import utils class Help(object): args = ('-h', '--help') kwargs = { 'action': 'help', 'default': argparse.SUPPRESS, 'help': '显示本帮助并退出' } async def main(): parser = argparse.ArgumentParser('main.py', add_help=False) parser.add_argument(*Help.args, **Help.kwargs) parser.add_argument('-v', dest='level', action='count', help='日志过滤等级,依次为 WARNING, INFO, DEBUG') subparsers = parser.add_subparsers(dest='method', help='模式选择', required=True) mode_list = subparsers.add_parser('list', add_help=False, help='列出所有课程和书籍') mode_list.add_argument('-d', '--detail', action='store_true', help='显示详细信息') mode_list.add_argument(*Help.args, **Help.kwargs) mode_flash = subparsers.add_parser('flash', add_help=False, help='对选定的课程执行刷课') target = mode_flash.add_mutually_exclusive_group(required=True) target.add_argument('-i', '--id', help='指定书籍 ID') target.add_argument('-c', '--current', action='store_true', help='限定为当前课程或书籍') target.add_argument('-a', '--all', action='store_true', help='刷全部课程(慎用 除非你知道自己在做什么)') mode_flash.add_argument(*Help.args, **Help.kwargs) args = parser.parse_args() logger.remove() logger.add(sys.stdout, level=['WARNING', 'INFO', 'DEBUG'][args.level or 0]) if args.method == 'list': await utils.list_books(detail=args.detail) else: if args.id: await utils.flash_by_id(args.id) elif args.current: await utils.flash_current() elif args.all: await utils.flash_all() if __name__ == '__main__': loop = asyncio.new_event_loop() try: loop.run_until_complete(main()) finally: loop.close()