argparse
(これも標準ライブラリの一部です)に切り替えて、デフォルト値のstdinでを使用し
ますargparse.FileType
。
import argparse, sys
p = argparse.ArgumentParser()
p.add_argument('input', nargs='?',
type=argparse.FileType(), default=sys.stdin)
args = p.parse_args()
print(args.input.readlines())
ただし、これではstdinのエンコーディングやその他のパラメータを指定できません。あなたがそれをしたいのなら、あなたは引数を非オプションにし、引数として与えられたFileType
ときにstdinでそれをやらせる必要があります:-
p.add_argument('input', type=FileType(encoding='UTF-8'))
'b'
この後者の場合は、バイナリモード( )I/Oを尊重しないことに注意してください。それだけが必要な場合は、上記のデフォルトの引数手法を使用できますが、たとえばdefault=sys.stdout.buffer
stdoutのバイナリI/Oオブジェクトを抽出します。-
ただし、ユーザーがとにかく指定した場合、これはまだ壊れます。(-
stdin / stdoutを使用すると、常に。でラップされますTextIOWrapper
。)
で動作させたい場合-
、またはファイルを開くときに指定する必要のある他の引数がある場合は、間違ってラップされた場合に引数を修正できます。
p.add_argument('output', type=argparse.FileType('wb'))
args = p.parse_args()
if hasattr(args.output, 'buffer'):
# If the argument was '-', FileType('wb') ignores the 'b' when
# wrapping stdout. Fix that by grabbing the underlying binary writer.
args.output = args.output.buffer
(のパラメータについて言及するためのmedhatへのハットチップ。)add_argument()
type