簡體   English   中英

使用argparse從stdin或輸入文件中讀取

[英]Read from stdin or input file with argparse

我想使用argparse 無論從讀取stdin 輸入文件。 換一種說法:

  • 如果給出了輸入文件,請閱讀。
  • 如果不是, 只有當它不是終端時才從stdin讀取。 (即正在輸入文件)
  • 如果這些標准都不滿足,則向argparse發出輸入信號不正確的信號。

我要求的行為類似於此問題中描述的行為,但我希望argparse不會將文件識別為失敗的輸入。

使用您鏈接到的問題中的信息,使用sys.stdin.isatty()檢查程序運行的實例是否是管道的一部分,如果沒有,則從輸入文件讀取,否則從stdin讀取。 如果輸入文件不存在或stdin為空則拋出錯誤。

希望有所幫助。

我建議只設置nargs='?' 然后單獨處理Nonetype的情況。 根據官方文檔“FileType對象理解偽參數' - '並自動將其轉換為sys.stdin以獲取可讀的FileType對象,並將sys.stdout轉換為可寫的FileType對象” 如果你想要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")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM