2013-10-29 19 views
9

用タイプ=のFileType(...)を指定してargparseでファイル名を取得するにはどのように、あなたが読めるファイルであることを、引数を必要とすることができますこの型を指定する利点として、argparseはファイルが読み込めるかどうかをチェックし、そうでなければエラーを表示します。<code>argparse.add_argument</code>方法の<code>type</code>パラメータを使用して、この引数

io.TextIOWrapperまたはio.BufferedReaderの代わりに、渡されたファイル名を取得する方法はありますか?

パーサーの文字列表現('sqlite_file': <_io.TextIOWrapper name='data/export.sqlite' ...、または'sqlite_file': <_io.BufferedReader name='data/export.sqlite' ...>)にファイル名が表示されるため、これが可能である必要があります。

どうすればよいですか?

+0

http://bugs.python.org/issue13824は、実際にファイルを開かずにチェックFileTYpe' 'の可能性に見えます。私がそこで提案した解決策は、 'os.access'を使ってファイル名をテストすることでした。 – hpaulj

答えて

15

はい、ファイルオブジェクトに.name attributeを使用してください。

デモ:

>>> import argparse 
>>> parser = argparse.ArgumentParser() 
>>> parser.add_argument('--sqlite-file', type=argparse.FileType('r')) 
_StoreAction(option_strings=['--sqlite-file'], dest='sqlite_file', nargs=None, const=None, default=None, type=FileType('r'), choices=None, help=None, metavar=None) 
>>> args = parser.parse_args(['--sqlite-file', '/tmp/demo.db']) 
>>> args.sqlite_file 
<_io.TextIOWrapper name='/tmp/demo.db' mode='r' encoding='UTF-8'> 
>>> args.sqlite_file.name 
'/tmp/demo.db' 
関連する問題