You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python Typer库的typer.Option/Argument中使用allow_dash参数?

Typer中allow_dash参数的正确用法

参数核心作用

allow_dash的本质是允许将单个破折号-作为参数的合法取值,当用户传入-时,你可以在代码中把它作为标准输入(stdin)的标识,手动读取标准流内容。注意:该参数不会自动帮你读取stdin,只是放行-这个特殊值,读取逻辑需要自己实现。

Option用法示例

import typer
import sys

def main(input_source: str = typer.Option(..., allow_dash=True)):
    if input_source == "-":
        # 当参数值为-时,读取标准输入
        content = sys.stdin.read()
        typer.echo(f"读取标准输入内容:\n{content}")
    else:
        # 否则按普通文件路径处理
        with open(input_source, "r") as f:
            typer.echo(f"读取文件内容:\n{f.read()}")

if __name__ == "__main__":
    typer.run(main)

测试方式:执行echo "这是标准输入的内容" | python your_script.py --input-source -,即可看到程序读取并输出管道传递的内容。如果将allow_dash设为False,传入-会直接触发Typer的参数验证错误。

Argument用法示例

import typer
import sys

def main(input_source: str = typer.Argument(..., allow_dash=True)):
    if input_source == "-":
        content = sys.stdin.read()
        typer.echo(f"读取标准输入内容:\n{content}")
    else:
        with open(input_source, "r") as f:
            typer.echo(f"读取文件内容:\n{f.read()}")

if __name__ == "__main__":
    typer.run(main)

测试方式:执行python your_script.py -,然后手动输入内容,按Ctrl+D(Linux/macOS)或Ctrl+Z(Windows)结束输入,程序会读取你输入的内容。

常见误区

  • 不是设置allow_dash=True就会自动读stdin,必须用户显式传入-作为参数值才会触发后续读取逻辑。
  • 如果allow_dash=False,传入-会被Typer判定为非法参数,直接报错终止程序,不会进入你的业务逻辑。

内容的提问来源于stack exchange,提问作者liaoming999

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 08:52:06