当前位置:首页>python>Python 的argparse 库介绍

Python 的argparse 库介绍

  • 2026-03-26 03:48:13
Python 的argparse 库介绍

argparse 是 Python 标准库中用于编写命令行接口的模块。它不仅能够自动生成帮助和使用说明,还提供了丰富的参数定义方式,能够轻松处理简单到复杂的命令行需求。本文将从基础到进阶,全面介绍 argparse 的每一个细节。

一、快速入门与核心概念

使用 argparse 通常遵循三步曲:

创建解析器:parser = argparse.ArgumentParser()

添加参数:parser.add_argument()

解析参数:args = parser.parse_args()

最简单的示例

import argparseparser = argparse.ArgumentParser(description='一个简单的加法程序')parser.add_argument('numbers'type=int, nargs='+'help='要相加的数字')parser.add_argument('--sum', dest='accumulate', action='store_const',                    const=sum, default=maxhelp='求和(默认求最大值)')args = parser.parse_args()print(args.accumulate(args.numbers))

命令行执行:

python demo.py 1 2 3 --sum6

在这个例子中,numbers 是一个位置参数,可以接受一个或多个整数;--sum 是一个可选参数,通过 action='store_const' 改变默认行为。

二、ArgumentParser 的构造参数

argparse.ArgumentParser 提供了丰富的初始化参数,用于定制解析器的行为。

prog:程序名称,默认从 sys.argv[0] 推断。在帮助信息中显示。

usage:自定义用法说明,默认根据参数自动生成。

description:程序描述,显示在帮助信息的最前面。

epilog:程序结语,显示在帮助信息的最后面。

parents:父解析器列表,用于继承公共参数。例如多个子命令共享的认证选项可以定义在一个父解析器中。

formatter_class:帮助信息格式化类,可选 argparse.RawDescriptionHelpFormatter(保留描述中的换行)、argparse.RawTextHelpFormatter(保留所有文本格式)、argparse.ArgumentDefaultsHelpFormatter(自动添加默认值到帮助信息)等。

prefix_chars:选项前缀字符,默认为 '-',可以设置为例如 + 或 - 的组合,以适应特殊需求。

fromfile_prefix_chars:参数文件前缀字符,如果参数值以该字符开头,则将其视为文件名并读取文件内容作为参数列表。例如设置为 '@',则 @args.txt 会从文件中读取参数。

argument_default:全局参数默认值,可以为所有参数设置一个默认值,除非被 add_argument 中的 default 覆盖。

conflict_handler:冲突处理策略,默认为 'error'(遇到重复选项名时报错),也可以设为 'resolve'(后定义的覆盖先定义的)。

add_help:是否自动添加 -h/--help 选项,默认为 True。

allow_abbrev:是否允许选项缩写,例如 --verb 可以匹配 --verbose(只要不与其他选项冲突),默认为 True。

exit_on_error:解析出错时是否自动退出程序,默认为 True。若设为 False,解析错误会引发 argparse.ArgumentError 异常。

三、add_argument 方法详解

add_argument() 是定义参数的核心方法,可以接受多种参数,每个参数都影响解析行为。

1. 参数名称

位置参数:直接指定名称,如 'filename',在命令行中必须按顺序提供。

可选参数:以 - 或 -- 开头,如 '-f'、'--file'。可以同时指定短选项和长选项:'-f', '--file'。

2. 动作(action)

动作定义了参数被解析时的行为,是 argparse 中最灵活的部分。

'store'(默认):存储参数的值。例如 parser.add_argument('--foo'),当命令行出现 --foo bar 时,args.foo = 'bar'。

'store_const':存储一个常量值。需要配合 const 参数使用,例如 parser.add_argument('--sum', action='store_const', const=sum)。

'store_true' / 'store_false':分别存储 True 或 False。通常用于布尔开关,如 --verbose。

'append':将多次出现的选项值追加到一个列表中。例如 parser.add_argument('--file', action='append'),命令行 --file a --file b 得到 args.file = ['a', 'b']。

'append_const':追加一个常量值,常用于需要多次添加但值固定的情况。

'count':统计选项出现的次数,常用于详细等级,如 -v、-vv。

'help':显示帮助信息并退出,通常由 -h 触发,无需手动指定。

'version':显示版本信息并退出,需要配合 version 参数使用,例如 parser.add_argument('--version', action='version', version='%(prog)s 1.0')。

'extend'(Python 3.8+):将多次出现的选项值扩展到同一个列表中,与 append 的区别在于它接收多个值(如 nargs='*')并展平。例如 --foo 1 2 --foo 3 4 得到 [1,2,3,4]。

自定义 Action:可以继承 argparse.Action 并重写 __call__ 方法,实现复杂逻辑。

3. nargs —— 参数个数

nargs 指定一个选项或位置参数应该读取的命令行参数的数量。

整数 N:精确读取 N 个参数,组合成一个列表。

'?':读取 0 或 1 个参数。通常与 default 或 const 配合,如果没有提供参数,则使用 default;如果选项出现但没有跟参数,则使用 const。

'*':读取 0 个或多个参数,组合成一个列表。

'+':读取 1 个或多个参数,组合成一个列表,如果至少有一个参数。

argparse.REMAINDER:读取剩余的所有参数,常用于实现包装器,例如 script.py file1 file2 --other args。

4. const

const 用于 store_const、append_const 以及 nargs='?' 等场景。当选项出现但不需要额外参数时,存储 const 的值。

5. default

当参数未在命令行中出现时,default 决定其值。默认值可以是任何 Python 对象,甚至可以是函数(在解析时调用)。如果设置了 default,帮助信息中可以通过 %(default)s 显示默认值(需配合 ArgumentDefaultsHelpFormatter 或手动在 help 中指定)。

6. type

type 指定参数的类型转换函数。可以是 Python 内置类型如 int、float,也可以是自定义的可调用对象,它接收一个字符串并返回转换后的值。如果转换失败,argparse 会抛出错误。

常用类型:int、float、str、bool(注意:bool('False') 仍为 True,建议使用自定义转换或 store_true)。

文件类型:argparse.FileType('r') 返回一个打开的文件对象,自动处理文件不存在等错误。

自定义类型:

def positive_int(s):    value = int(s)    if value <= 0:        raise argparse.ArgumentTypeError(f"{s} 必须是正整数")    return valueparser.add_argument('--num'type=positive_int)

7. choices

choices 限定参数值必须在给定的序列中,可以是列表、元组或集合。argparse 会自动生成错误信息并显示可选值。

parser.add_argument('--mode', choices=['read''write'], help='操作模式')

8. required

对于可选参数,可以设置 required=True 强制要求必须提供该选项。

9. help

参数的帮助文本,会显示在自动生成的帮助信息中。可以在 help 中使用格式化字符串,如 %(default)s 显示默认值。如果不想让参数出现在帮助中,可以将 help 设为 argparse.SUPPRESS。

10. metavar

metavar 在帮助信息中代表参数值的名称,例如对于 --file FILE,FILE 就是 metavar。如果不指定,默认使用参数名的大写形式。对于多个参数(nargs>1),可以传入一个元组来分别命名。

11. dest

dest 指定解析后存储在命名空间中的属性名。对于可选参数,默认根据选项名去除前缀 - 并转换中划线为下划线得到;对于位置参数,默认使用参数名本身。可以手动指定 dest 来改变存储的属性名。

12. version

当 action='version' 时,version 参数指定版本字符串,支持 %(prog)s 格式。

四、解析参数:parse_args() 与解析规则

parse_args() 默认从 sys.argv 读取参数,返回一个 argparse.Namespace 对象。也可以传入自定义的参数字符串列表,如 args = parser.parse_args(['--foo', 'bar'])。

解析规则:

位置参数按顺序与命令行参数匹配。

可选参数可以出现在任何位置,参数值紧跟在选项后(如 --file a.txt 或 -fa.txt 如果 prefix_chars 包含 -)。

-- 特殊标记:之后的参数全部被视为位置参数,即使它们以 - 开头。例如 script.py --file -- --help,第一个 --file 是可选参数,后面的 --help 被视为位置参数(不会被解析为帮助选项)。

parse_args() 在遇到错误时默认打印错误信息并退出程序(exit_on_error=True)。如果希望捕获错误,可以设置 exit_on_error=False,此时会抛出 argparse.ArgumentError 或 SystemExit 异常。

解析命名空间

parse_args() 返回的 Namespace 对象允许通过点号访问属性,也可以转换为字典:vars(args)。

五、参数组与互斥组

1. 参数组 (Argument Groups)

使用 add_argument_group() 可以将相关参数分组显示在帮助信息中,但不影响解析逻辑。例如:

group = parser.add_argument_group('网络配置')group.add_argument('--host', help='主机地址')group.add_argument('--port', type=int, help='端口号')

可以指定组的标题(title)和描述(description)。

2. 互斥组 (Mutually Exclusive Groups)

使用 add_mutually_exclusive_group() 创建的组,其中的参数不能同时出现。可以设置 required=True 强制必须提供其中一个。

group = parser.add_mutually_exclusive_group(required=True)group.add_argument('--start', action='store_true', help='启动服务')group.add_argument('--stop', action='store_true', help='停止服务')group.add_argument('--restart', action='store_true', help='重启服务')

六、子命令 (Sub-commands)

子命令允许构建具有多个命令的复杂 CLI,如 git commit、git push。使用 add_subparsers() 创建子命令解析器。

parser = argparse.ArgumentParser()subparsers = parser.add_subparsers(dest='command', required=Truehelp='子命令')# 创建 'commit' 子命令parser_commit = subparsers.add_parser('commit'help='提交更改')parser_commit.add_argument('-m''--message', required=Truehelp='提交信息')parser_commit.add_argument('--amend', action='store_true'help='修改上一次提交')# 创建 'push' 子命令parser_push = subparsers.add_parser('push'help='推送更改')parser_push.add_argument('remote', nargs='?', default='origin'help='远程仓库')parser_push.add_argument('--force', action='store_true'help='强制推送')args = parser.parse_args()if args.command == 'commit':    print(f'提交信息:{args.message}')elif args.command == 'push':    print(f'推送到 {args.remote}')

关键点:

dest 指定存储子命令名称的属性,上例中为 args.command。

required=True(Python 3.7+)强制用户必须提供子命令。

可以为每个子命令设置自己的标题、描述、参数等。

子命令解析器可以继承父解析器的参数(通过 parents 参数)。

七、高级技巧与最佳实践

1. 从文件读取参数

当参数过多时,可以将参数写入文件,并使用 fromfile_prefix_chars 加载:

parser = argparse.ArgumentParser(fromfile_prefix_chars='@')parser.add_argument('--foo')parser.add_argument('--bar')args = parser.parse_args()

命令行执行:

python script.py @args.txt

文件 args.txt 内容示例:

--foohello--barworld

2. 使用 argparse 的格式化类定制帮助信息

argparse.RawDescriptionHelpFormatter:保留描述和结语中的换行,但不影响参数帮助的格式。

argparse.RawTextHelpFormatter:保留所有帮助文本中的换行,允许在 help 字符串中使用 \n。

argparse.ArgumentDefaultsHelpFormatter:自动在每个参数的帮助后添加默认值信息。

帮助信息会显示:--port PORT 监听端口 (default: 8080)。

3. 处理选项缩写

默认情况下,argparse 允许选项缩写,只要不产生歧义。例如 --ver 可以匹配 --verbose,但如果同时有 --version,则 --ver 会产生歧义而报错。可以通过 allow_abbrev=False 禁用缩写。

4. 自定义参数解析错误处理

设置 exit_on_error=False 可以捕获解析错误:

parser = argparse.ArgumentParser(exit_on_error=False)parser.add_argument('--age'type=int)try:    args = parser.parse_args()except argparse.ArgumentError as e:    print(f'参数错误:{e}')    # 手动处理

5. 使用 parents 共享公共参数

如果多个解析器共享一组公共选项(如 --verbose、--debug),可以将它们定义在一个父解析器中,然后通过 parents 继承。

parent_parser = argparse.ArgumentParser(add_help=False)parent_parser.add_argument('--verbose', action='store_true')parent_parser.add_argument('--debug', action='store_true')parser = argparse.ArgumentParser(parents=[parent_parser])parser.add_argument('input')args = parser.parse_args()

注意要设置父解析器的 add_help=False,避免冲突。

6. 动态默认值

default 可以是一个可调用对象,该对象会在解析时被调用(不带参数)。这适用于需要根据上下文动态生成默认值的场景。

def get_default_file():    return f'output_{datetime.now().strftime("%Y%m%d")}.txt'parser.add_argument('--output', default=get_default_file)

7. 处理位置参数的可选性

通过 nargs='?' 可以使位置参数变为可选,结合 default 设置默认值。

parser.add_argument('input', nargs='?'default='stdin', help='输入文件(默认标准输入)')

8. 参数冲突处理

如果两个选项有相同的标志,conflict_handler 可以控制行为:

'error'(默认):遇到冲突时报错。

'resolve':后面的覆盖前面的。

parser = argparse.ArgumentParser(conflict_handler='resolve')parser.add_argument('-f''--foo')parser.add_argument('-f''--foo-bar')  # 后定义的 -f 覆盖了前面的

9. 使用 argparse 与配置文件的结合

虽然 argparse 本身不直接支持配置文件,但可以结合 add_argument 的 default 和从文件读取的功能实现类似效果。例如先解析配置文件,然后用命令行覆盖。

10. 测试 argparse 代码

可以模拟命令行参数进行测试:

def test_parse_args():    parser = argparse.ArgumentParser()    parser.add_argument('--foo')    args = parser.parse_args(['--foo''bar'])    assert args.foo == 'bar'

八、常见陷阱与注意事项

布尔选项与 type=bool:不要用 type=bool 处理布尔标志,因为 bool('False') 结果是 True。应使用 action='store_true' 或 store_false。

文件类型:argparse.FileType 打开的文件在程序结束前不会自动关闭,最好在不再需要时手动关闭,或使用 with 语句。

位置参数与可选参数的顺序:位置参数必须在可选参数之前(在命令行中),除非使用 -- 分隔。

子命令的 dest:如果没有设置 dest,子命令名称将存储在一个默认的变量中,通常为 subparser_name,但指定 dest 更清晰。

帮助信息中的换行:如果希望帮助信息包含换行,需要使用 RawTextHelpFormatter,并在 help 字符串中显式添加 \n。

参数解析后的验证:argparse 主要负责解析和基本类型检查,更复杂的业务逻辑验证(如参数间的依赖关系)通常需要在解析后手动进行。

九、总结

argparse 是一个功能全面且设计优雅的命令行解析库,从简单的脚本到复杂的多级命令工具都能胜任。掌握其核心概念和高级用法,可以帮助开发者快速构建出专业、用户友好的命令行应用程序。无论是位置参数、可选参数、子命令,还是类型转换、互斥组、自定义动作,argparse 都提供了简洁而强大的支持。通过合理利用这些特性,可以大幅提升 CLI 程序的健壮性和用户体验。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-03-27 17:23:29 HTTP/2.0 GET : https://f.mffb.com.cn/a/480431.html
  2. 运行时间 : 0.221573s [ 吞吐率:4.51req/s ] 内存消耗:4,714.51kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=27e535cf3d12bb06a43c475134a7b83b
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.001281s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001660s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000673s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000609s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001431s ]
  6. SELECT * FROM `set` [ RunTime:0.000579s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001644s ]
  8. SELECT * FROM `article` WHERE `id` = 480431 LIMIT 1 [ RunTime:0.006063s ]
  9. UPDATE `article` SET `lasttime` = 1774603409 WHERE `id` = 480431 [ RunTime:0.029649s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000705s ]
  11. SELECT * FROM `article` WHERE `id` < 480431 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001061s ]
  12. SELECT * FROM `article` WHERE `id` > 480431 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001101s ]
  13. SELECT * FROM `article` WHERE `id` < 480431 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.003648s ]
  14. SELECT * FROM `article` WHERE `id` < 480431 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.012149s ]
  15. SELECT * FROM `article` WHERE `id` < 480431 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.002038s ]
0.223166s