エラーは、required=True
パラメータのためです。メッセージはあなたに何が間違っているかを伝えます。それは次のようになります。
parser.add_argument('infile', nargs='?', type=argparse.FileType('r'), default=sys.stdin)
「--infile」に反対し、あなたが位置引数を作成してきたように、このinfile
「を呼び出す」とは。はそれが必要かどうかを決定します。 nargs='?'
では必須ではありません。定義上は任意です(しかし、引数はoptionals
ではありません)。コマンドラインで -
FileType
タイプが(「」または)ファイルに名前を付けることができます。開いて(stdinはすでに開いています)、args.infile
属性に割り当てます。それ以上は何もしません。
だから、パースした後、args.infile
を使用すると、あなたが必要な読み(及び必要に応じて閉じた場合はstdinない)ことができ、このオープンファイルにアクセスすることができます。
これは、コードで使用するために開くファイルをユーザーに指定させる便利な方法です。これは、1つのファイルを読み込んで、何かを実行し、別のファイルに書き込む単純なスクリプトを対象としていました。
しかし、あなたが見ているのはstdin
なので、このタイプの使用には何の意味もありません。 sys.stdin
は常に読むことができます。パーサーにstdin
を読み取らせる方法はありません。それはコマンドラインから来るsys.argv
を解析します。
ファイルからコマンドライン文字列を読み取るようにパーサーに指示するプレフィックスファイル機能があります(@
)。ファイルを解析し、値をsys.argv
につなぎます。文書を参照してください。