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

我想使用argparse从读取或者 stdin 输入文件。换一种说法:

  • 如果给出了输入文件,请阅读该文件。

  • 如果不是,请在不是终端的情况下从stdin读取。(即正在传输文件)

  • 如果这两个条件都不满足,则向argparse发出信号,指出输入不正确。

我想argparse不将任何文件识别为失败的输入。


慕容3067478
浏览 250回答 2
2回答

三国纷争

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

忽然笑

使用链接到问题的信息,如何sys.stdin.isatty()检查程序是否正在运行的实例是管道的一部分,如果不是,则从输入文件中读取,否则从中读取stdin。如果输入文件不存在或stdin为空,则抛出错误。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python