我想使用argparse从读取或者 stdin 或输入文件。换一种说法:如果给出了输入文件,请阅读该文件。如果不是,请仅在不是终端的情况下从stdin读取。(即正在传输文件)如果这两个条件都不满足,则向argparse发出信号,指出输入不正确。我想argparse不将任何文件识别为失败的输入。
2 回答

三国纷争
TA贡献1804条经验 获得超7个赞
我只建议设置nargs='?',然后分别处理Nonetype的情况。根据官方文档,“ FileType对象了解伪参数'-',并针对可读FileType对象将其自动转换为sys.stdin,对于可写FileType对象将其自动转换为sys.stdout”。因此,如果您想要标准输入,只需给它一个破折号。
例子
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")

忽然笑
TA贡献1806条经验 获得超5个赞
使用链接到问题的信息,如何sys.stdin.isatty()
检查程序是否正在运行的实例是管道的一部分,如果不是,则从输入文件中读取,否则从中读取stdin
。如果输入文件不存在或stdin
为空,则抛出错误。
添加回答
举报
0/150
提交
取消