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

如何用argparse实现命令行参数与标准输入的互斥字符串传入?

实现命令行参数或标准输入二选一的Python脚本

我来帮你完善这个需求的实现脚本,同时拆解关键逻辑,让你明白每一步的作用:

完整可运行脚本

#!/usr/bin/env python
import argparse
from sys import stdin

def main():
    parser = argparse.ArgumentParser(description='接收输入:要么通过命令行参数,要么通过标准输入,二选一')
    # 创建互斥组,强制用户必须选择一种输入方式
    input_group = parser.add_mutually_exclusive_group(required=True)
    
    # 可选位置参数:用户直接传字符串时使用
    input_group.add_argument('str_arg', nargs='?', type=str, help='作为命令行参数传入的字符串')
    # 触发选项:用户选择从标准输入读取时使用
    input_group.add_argument('--from-stdin', action='store_true', help='从标准输入读取内容')
    
    args = parser.parse_args()
    
    # 处理输入内容
    if args.from_stdin:
        # 读取标准输入的所有内容,strip()去掉首尾空白(可根据需求调整)
        input_str = stdin.read().strip()
        if not input_str:
            parser.error('标准输入不能为空!')
    else:
        input_str = args.str_arg
        if not input_str:
            parser.error('命令行参数不能为空!')
    
    # 这里替换成你的业务逻辑,比如打印输入内容
    print(f'收到的输入内容:{input_str}')

if __name__ == '__main__':
    main()

关键逻辑说明

  • 互斥组配置:add_mutually_exclusive_group(required=True)是核心,它确保用户只能选一种输入方式——既不能同时传命令行参数和--from-stdin,也不能两者都不传。
  • 可选位置参数:nargs='?'让str_arg变成可选参数,这样当用户使用--from-stdin时,不需要额外传位置参数,argparse不会抛出错误。
  • 标准输入读取:当用户指定--from-stdin时,用stdin.read()读取所有输入内容;strip()是为了清理首尾的换行和空格,如果需要保留原始格式,可以去掉这个方法。
  • 空输入校验:添加了对空输入的判断,避免用户传入空字符串或者标准输入为空的情况,用parser.error()抛出清晰的错误提示。

使用示例

  1. 通过命令行参数传入
python my_script.py "这是命令行传入的内容"

输出:

收到的输入内容:这是命令行传入的内容
  1. 通过标准输入传入
    可以用管道传递内容:
echo "这是从标准输入来的内容" | python my_script.py --from-stdin

也可以直接交互式输入:

python my_script.py --from-stdin
# 此时输入内容,按Ctrl+D(Linux/macOS)或Ctrl+Z(Windows)结束输入
  1. 错误场景演示
  • 既不传参数也不指定--from-stdin:
python my_script.py

会报错:

error: one of the arguments str_arg --from-stdin is required
  • 同时传参数和--from-stdin:
python my_script.py "测试内容" --from-stdin

会报错:

error: argument --from-stdin: not allowed with argument str_arg

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:44:48