使用argparse从stdin或输入文件中读取

时间:2013-05-16 08:02:21

标签: python file-io argparse

我想使用argparse stdin 读取输入文件。换句话说:

  • 如果给出了输入文件,请阅读。
  • 如果不是,请从stdin 中读取,如果它不是终端。 (即正在输入文件)
  • 如果这些标准都不满足,请发信号通知argparse输入不正确。

我要求的行为类似于this question中描述的行为,但我希望argparse将任何文件都识别为失败的输入。

2 个答案:

答案 0 :(得分:1)

使用您链接到的问题中的信息,如何使用sys.stdin.isatty()检查程序运行的实例是否是管道的一部分,如果没有,则从输入文件中读取,否则从{{读取1}}。如果输入文件不存在或stdin为空则抛出错误。

希望有所帮助。

答案 1 :(得分:0)

我只建议设置nargs='?',然后分别处理Nonetype的情况。根据{{​​3}},“ FileType对象理解伪参数'-',并针对可读FileType对象将其自动转换为sys.stdin,对于可写FileType对象将其自动转换为sys.stdout” 。因此,如果需要stdin,请给它一个短划线。

示例

import argparse
import sys
parser = argparse.ArgumentParser()
parser.add_argument('inputfile', nargs='?', type=argparse.FileType('r'))
if not inputfile:
    sys.exit("Please provide an input file, or pipe it via stdin")