我想使用argparse
从 stdin
或读取输入文件。换句话说:
我要求的行为类似于this question中描述的行为,但我希望argparse
将任何文件都识别为失败的输入。
答案 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")