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

如何使用argparse实现同时支持stdin、文件或目录作为输入?

实现同时支持 stdin、文件或目录输入的 argparse 配置

要实现三者互斥的输入支持,核心思路是用可选位置参数(nargs='?')接收路径,再手动判断输入类型:无参数时读取 stdin,有参数时区分文件/目录。以下是具体实现方案:

完整代码示例

import argparse
import os
import sys

def main():
    parser = argparse.ArgumentParser(description="支持从stdin、单个文件或单个目录读取输入")
    # 可选位置参数:不传则使用stdin,传则为文件/目录路径
    parser.add_argument('input', nargs='?', 
                        help="输入文件路径、目录路径,留空则从标准输入读取")
    args = parser.parse_args()

    if args.input is None:
        # 处理stdin输入
        print("读取标准输入内容:")
        for line in sys.stdin:
            # 替换为你的业务逻辑
            print(line.strip())
    else:
        full_path = os.path.abspath(args.input)
        if not os.path.exists(full_path):
            print(f"错误:路径 {full_path} 不存在", file=sys.stderr)
            sys.exit(1)
        
        if os.path.isfile(full_path):
            # 处理单个文件
            print(f"读取文件:{full_path}")
            with open(full_path, 'r') as f:
                for line in f:
                    # 替换为你的业务逻辑
                    print(line.strip())
        elif os.path.isdir(full_path):
            # 处理目录(示例为遍历目录下所有文件)
            print(f"遍历目录:{full_path}")
            for filename in os.listdir(full_path):
                file_path = os.path.join(full_path, filename)
                if os.path.isfile(file_path):
                    print(f"发现文件:{file_path}")
                    # 这里可添加读取文件的逻辑

if __name__ == "__main__":
    main()

关键细节说明

  • nargs='?' 的作用:让位置参数变为可选——用户可以不传参数(此时args.input为None),或传一个参数(文件/目录路径),正好对应三者之一的输入需求。
  • 放弃 argparse.FileType:因为该类型只能识别合法文件,无法处理目录,所以改用手动判断路径类型,灵活性更高。
  • 路径合法性检查:先通过os.path.exists验证路径存在,避免后续报错;再用os.path.isfile和os.path.isdir区分文件/目录。
  • 错误处理:路径不存在时输出错误信息到标准错误流,并退出程序,符合命令行工具的规范。

使用示例

  1. 从 stdin 读取:
    echo "测试内容" | python your_script.py
    
  2. 读取单个文件:
    python your_script.py test.txt
    
  3. 读取目录:
    python your_script.py ./test_dir
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 00:50:13