ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Typer 怎么收集密码输入:hide_input 隐藏输入与 confirmation_prompt 二次确认

Typer 怎么收集密码输入:hide_input 隐藏输入与 confirmation_prompt 二次确认 Typer 怎么收集密码输入hide_input 隐藏输入与 confirmation_prompt 二次确认【免费下载链接】typerTyper, build great CLIs. Easy to code. Based on Python type hints.项目地址: https://gitcode.com/GitHub_Trending/ty/typer当一个 Typer CLI 程序需要在终端里向用户要一个敏感值比如密码同时希望用户输入两次以确认没有打错时官方教程给出的做法是在CLI Option上组合typer.Option的三个参数promptTrue缺值时在终端交互式提问、confirmation_promptTrue要求输入两次且一致、hide_inputTrue输入时屏幕不显示任何内容连****都不显示。本文按官方教程 docs/tutorial/options/password.md 的顺序从安装 Typer 到运行验证完成这条可执行路径。准备条件安装 Typer按 docs/tutorial/install.md 的说明先安装uv再创建项目并添加 Typer$ uv init awesome-project --bare $ cd awesome-project $ uv add typer其中--bare表示只创建最简pyproject.toml不生成示例文件uv add会创建项目虚拟环境.venv、把 Typer 写入pyproject.toml并生成uv.lock。后续命令都用uv run在项目环境里执行无需手动激活虚拟环境。第一步用 confirmation_prompt 要求输入两次先看 docs_src/options/password/tutorial001_an_py310.py 的写法用--email选项做二次确认文档中展示的正是这个 Annotated 版本from typing import Annotated import typer app typer.Typer() app.command() def main( name: str, email: Annotated[str, typer.Option(promptTrue, confirmation_promptTrue)], ): print(fHello {name}, your email is {email}) if __name__ __main__: app()参数含义对应文档描述promptTrue让程序在缺值时向用户提问而不是直接报错confirmation_promptTrue让用户输入两次值不一致会报错并重新提问见 docs/tutorial/options/prompt.md 的 Confirmation prompt 一节。运行uv run python main.py Camila文档示例输出如下// 程序先要 email再要确认 # Email: $ camilaexample.com # Repeat for confirmation: $ camilaexample.com Hello Camila, your email is camilaexample.com如果两次输入不一致文档示例的行为是给出错误Error: The two entered values do not match然后重新从头提示输入直到两次一致才继续执行。第二步叠加 hide_input 收集密码密码场景在此基础上只多一个参数hide_inputTrue完整代码见 docs_src/options/password/tutorial002_an_py310.pyfrom typing import Annotated import typer app typer.Typer() app.command() def main( name: str, password: Annotated[ str, typer.Option(promptTrue, confirmation_promptTrue, hide_inputTrue) ], ): print(fHello {name}. Doing something very secure with password.) print(f...just kidding, here it is, very insecure: {password}) if __name__ __main__: app()文档说明加hide_inputTrue后大多数 shell 下输入密码时屏幕不显示任何内容但程序仍能收到完整密码再配合confirmation_promptTrue就是双重确认的密码输入。运行uv run python main.py Camila文档示例输出如下假设两次输入的密码都是typerrocks// 提示输入密码但输入时屏幕什么都不显示 # Password: $ # Repeat for confirmation: $ Hello Camila. Doing something very secure with password. ...just kidding, here it is, very insecure: typerrocks这里的Password:/Repeat for confirmation:提示文本由 Typer 根据参数名自动生成程序最终通过函数参数拿到两次确认后的值。验证结果除手动运行外仓库为这两个示例提供了自动化测试可以直接作为核对标准tests/test_tutorial/test_options/test_password/test_tutorial002.py非交互传参runner.invoke(mod.app, [Camila, --password, secretpassword])断言退出码为 0 且输出包含传入的密码值——说明--password value可以直接代替交互输入交互输入runner.invoke(mod.app, [Camila], inputsecretpassword\nsecretpassword\n)断言输出中出现Password:和Repeat for confirmation:提示但不出现Password: secretpassword这样带输入内容的行——这正是hide_inputTrue生效的判断依据--help输出中显示--password str [required]。也就是说验证hide_input是否生效看提示行是否只打印标签、不打印用户输入的内容即可。替代路径与边界不用 Annotated 的等价写法docs_src/options/password/tutorial002_py310.py 展示了不带Annotated的版本参数直接写在默认值里password: str typer.Option(..., promptTrue, confirmation_promptTrue, hide_inputTrue)。两种写法行为一致测试同时覆盖两个模块。优先用带 prompt 的 CLI Option而不是typer.prompt()docs/tutorial/prompt.md 说明交互式提问通常应使用带promptTrue的CLI Option因为它仍允许非交互调用例如脚本里直接传--password只有在确实无法用CLI Option时才退而使用typer.prompt()/typer.confirm()。适用条件文档对隐藏输入的描述限定为in most shells即该行为依赖所在 shell 的输入回显能力。本文示例只是教学用途第二个示例打印密码是为了演示参数值确实被收到不代表安全的密码处理方式文档本身也标注 very insecure。完整的密码选项教程在 docs/tutorial/options/password.md二次确认的详细行为含输入不一致时的重试流程在 docs/tutorial/options/prompt.md 的 Confirmation prompt 一节可以继续对照。【免费下载链接】typerTyper, build great CLIs. Easy to code. Based on Python type hints.项目地址: https://gitcode.com/GitHub_Trending/ty/typer创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表