当前位置:首页>python>深入浅出 Typer:用 Python 写出专业级命令行工具

深入浅出 Typer:用 Python 写出专业级命令行工具

  • 2026-08-19 01:54:31
深入浅出 Typer:用 Python 写出专业级命令行工具
关注+星标,每天学习Python新技能

来源:网络

写脚本容易,写"像模像样"的命令行工具难。Typer 来自 FastAPI 作者之手,让你用类型注解就生成带自动帮助、自动校验、子命令的专业 CLI。


一、为什么是 Typer?argparse 不香吗?

很多同学第一次写命令行工具,是用标准库自带的 argparse。它能用,但写起来啰嗦:每个参数都要 add_argument 一长串;要做子命令得套一层 subparsers;帮助文档得自己一行行写。一个稍微像样的工具,配置文件比业务代码还长。

Typer 是当今 Python 写 CLI 最舒服的选择之一(GitHub 星标 15k+、月下载量千万级),它和 FastAPI 师出同门——作者都是 Sebastián Ramírez。它的核心哲学就一句话:类型注解即接口。你用 Python 的类型提示声明参数,Typer 自动把函数变成命令行入口、自动生成 --help、自动做类型转换与校验。

✅ 极简心智 — 函数 + 类型注解就是全部,不用记一堆 add_argument 参数。

📖 帮助自动生成 — 函数的 docstring、参数 help 自动变成专业帮助文档,连配色都帮你做好了。

🧱 底层稳健 — 它构建在超成熟的 click 之上,兼容 click 生态,稳得一批。

二、安装与你的第一个 CLI

安装就一行:

pip install typer

新建 hello.py,写一个普通函数,再用 typer.run 跑起来:

import typer  def main(name: str):     print(f"Hello {name}")  if __name__ == "__main__":     typer.run(main)

终端里执行 python hello.py Alice,你会看到 Hello Alice。注意:name: str 这个类型注解,Typer 拿来当成命令行参数——你甚至没告诉它这是参数,它自己推断出来了。试试 python hello.py --help,一个完整帮助页已经躺在那了。

💡 心智模型:Typer 把"没默认值的参数"当成必填位置参数,"有默认值的参数"自动升级成 --选项。类型注解决定接受什么类型,str 收字符串、int 自动转整数、bool 自动识别开关。

三、类型即校验:自动转换与报错

这就是 Typer 最爽的地方。你声明类型,校验和转换全自动。比如要接收一个年龄(整数):

import typer  def main(age: int):     print(f"明年你就 {age + 1} 岁了")  if __name__ == "__main__":     typer.run(main)

用户输入 python age.py 25 → 正常;输入 python age.py abc → Typer 直接报错:Invalid value for 'AGE': 'abc' is not a valid integer,连提示都帮你写好了,完全不用自己写 try/except。换成 floatPathdatetime、枚举 Enum,统统自动支持。

四、选项 Options:可选参数与简写

位置参数(Argument)用户必须按序传入;更多时候我们要的是"可选开关",用 typer.Option

import typer  def main(     name: str = typer.Option(..., "--name", "-n", help="你的名字"),     count: int = typer.Option(1, "--count", "-c", help="重复次数"),     verbose: bool = typer.Option(False, "--verbose", "-v", help="是否啰嗦"), ):     for _ in range(count):         msg = f"Hello {name}"         if verbose:             msg += " (verbose mode)"         print(msg)  if __name__ == "__main__":     typer.run(main)

... 表示必填(用户不传就报错并提示);给了默认值的就是可选。--name / -n 同时支持长名和短名。布尔值更妙:传 --verbose 即为 True,不传就是 False,不用写 --verbose true 这么蠢的写法。

五、子命令:像 git 一样组织工具

专业 CLI 往往是一组命令(想想 git commitgit push)。Typer 用 Typer() 应用 + @app.command() 装饰器轻松实现:

import typer  app = typer.Typer()  @app.command() def init():     """初始化项目"""     print("已初始化项目")  @app.command() def commit(message: str = typer.Option(..., "--message", "-m")):     """提交改动"""     print(f"已提交:{message}")  if __name__ == "__main__":     app()

python tool.py initpython tool.py commit -m "fix bug" 各自运行。函数的 docstring 会自动变成该子命令的帮助说明——文档即代码,绝不断层。

六、交互式输入:prompt 与密码

有些参数用户更适合"被问一句再输",比如密码。Typer 一行搞定交互:

import typer  def main(     username: str = typer.Option(..., prompt="你的用户名"),     password: str = typer.Option(         ..., prompt=True, hide_input=True,         help="登录密码(输入时不显示)",     ), ):     print(f"欢迎, {username}!(密码长度 {len(password)})")  if __name__ == "__main__":     typer.run(main)

prompt=True 会让程序运行时主动问你;hide_input=True 让密码输入时变成小黑点;再加 confirmation_prompt=True 还能二次确认(改密码场景必备)。体验直接拉满。

七、富输出:和 Rich 天生一对

还记得我们前面讲过的 Rich 吗?Typer 内置了对 Rich 的支持,彩色输出、表格、进度条信手拈来。最简单的彩色提示:

import typer  def main():     typer.secho("成功!", fg=typer.colors.GREEN, bold=True)     typer.secho("警告~", fg=typer.colors.YELLOW)     typer.secho("出错了", fg=typer.colors.RED, bg=typer.colors.WHITE)  if __name__ == "__main__":     typer.run(main)

想用更花的 Rich 组件?直接 from rich import print / Console 即可——因为 Typer 本来就把 Rich 当亲兄弟。报表、树形结构、Markdown 渲染,统统能塞进 CLI。

八、实战:批量重命名工具

来写一个真正有用的小工具:给某个目录下所有 .txt 文件批量加前缀。综合运用 Argument、Option、Path 和进度条:

import typer from pathlib import Path  app = typer.Typer()  @app.command() def rename(     folder: Path = typer.Argument(..., help="目标目录"),     prefix: str = typer.Option("", "--prefix", "-p", help="加的前缀"), ):     """批量给 .txt 文件加前缀"""     files = list(folder.glob("*.txt"))     if not files:         typer.secho("没找到 .txt 文件", fg=typer.colors.YELLOW)         raise typer.Exit(code=1)      with typer.progressbar(files, label="重命名中") as bar:         for f in bar:             f.rename(f.with_name(f"{prefix}{f.name}"))      typer.secho(f"完成!处理了 {len(files)} 个文件", fg=typer.colors.GREEN)  if __name__ == "__main__":     app()

typer.progressbar 自带进度条;raise typer.Exit(code=1) 用标准退出码告诉调用方"出错了",其它程序或 shell 脚本能正确感知。运行 python tool.py ./docs -p "2026_" 即可。

九、回调与全局选项

想在所有子命令之前先执行一段逻辑(比如读配置、校验版本)?用 @app.callback()

import typer  app = typer.Typer()  @app.callback() def main(verbose: bool = typer.Option(False, "--verbose")):     """我的超级工具集"""     if verbose:         print("详细模式已开启")  @app.command() def run():     print("运行中...")  if __name__ == "__main__":     app()

这样 --verbose 成了"全局开关",所有子命令都能用,而 callback 的 docstring 还成了整个工具的顶层说明。超适合做"瑞士军刀"型工具。

十、新手最常踩的 5 个坑

1. 忘记 if __name__ == "__main__": app():只定义了命令却没调用 app(),跑脚本啥也不发生。

2. 参数没写类型注解:Typer 靠注解推断参数类型,漏了 : str 这类标注,它不知道怎么解析,直接报错。

3. 把"可选参数"写成了 Argument:想做成 --xxx 就该用 Option,否则会被当成必填位置参数。

4. 子命令忘了 @app.command():函数定义好了却没装饰,Typer 根本不会注册它。

5. 布尔参数自己解析字符串:别写 flag: str 再判断 "true",直接用 bool,Typer 自动支持 --flag / --no-flag

十一、总结:Typer 速查表

需求
Typer 写法
单命令 CLI
typer.run(main)
多命令 CLI
app = Typer(); @app.command()
必填位置参数
x: str = typer.Argument(...)
可选开关
x = typer.Option(default, "--x", "-x")
交互输入/密码
prompt=True, hide_input=True
彩色输出
typer.secho(..., fg=typer.colors.X)
进度条
with typer.progressbar(items) as bar
退出码
raise typer.Exit(code=1)

一句话总结:Typer 用最 Pythonic 的方式——类型注解——把"写命令行工具"从体力活变成创造乐趣。它和前面讲过的 FastAPI(同作者)、Pydantic、httpx、Rich、Loguru 同属现代 Python 工程"标配全家桶",强烈建议一起学。小工具、内部脚本、DevOps 辅助命令,Typer 几乎万能。

长按或扫描下方二维码,免费获取 Python公开课和大佬打包整理的几百G的学习资料,内容包含但不限于Python电子书、教程、项目接单、源码等等

扫描二维码-免费领取

推荐阅读

这 25 个 Pandas 实用技巧你都会吗

五分钟竟能轻松掌握 Python 自动化测试 Selenium !

25个超实用Python极简代码技巧|新手直接复用

Java Map vs Python 字典:异同点深度剖析,一篇让你彻底搞懂

点击 阅读原文了解更多

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-08-21 17:25:27 HTTP/2.0 GET : https://f.mffb.com.cn/a/508187.html
  2. 运行时间 : 0.215717s [ 吞吐率:4.64req/s ] 内存消耗:4,519.58kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=9e79f8d4a4f7997ead757abb58a3b69e
  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.001083s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001531s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000660s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000546s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001141s ]
  6. SELECT * FROM `set` [ RunTime:0.000460s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001211s ]
  8. SELECT * FROM `article` WHERE `id` = 508187 LIMIT 1 [ RunTime:0.000936s ]
  9. UPDATE `article` SET `lasttime` = 1787304327 WHERE `id` = 508187 [ RunTime:0.017159s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000605s ]
  11. SELECT * FROM `article` WHERE `id` < 508187 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001425s ]
  12. SELECT * FROM `article` WHERE `id` > 508187 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001228s ]
  13. SELECT * FROM `article` WHERE `id` < 508187 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.001898s ]
  14. SELECT * FROM `article` WHERE `id` < 508187 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.001721s ]
  15. SELECT * FROM `article` WHERE `id` < 508187 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.002589s ]
0.219279s