入力ファイルの引数があり、argparseで簡単に処理できます
parser.add_argument( '-al', nargs = 1, type = argparse.FileType( 'r' ),
dest = 'alphabet' )
このパラメーターはオプションですが、省略した場合でも、現在のディレクトリを検索してこの入力ファイルを取得する必要があります。拡張子が .al のファイルが複数ある場合、またはファイルがない場合は、エラーが発生します。それ以外の場合は、見つかったファイルを開きます。
#if no alphabet look for .al file in current directory
if( args.alphabet == None ):
AlFiles = [ f for f in os.listdir( '.' )
if os.path.isfile( f ) and f.endswith( '.al' ) ]
#there should be one file with .al extension
if( len( AlFiles ) != 1 ):
sys.exit( 'error: no alphabet file provided and '
'there are more than one or no .al file in current directory, '
'which leads to ambiguity' )
args.alphabet = open( AlFiles[0], 'r' )
デフォルトまたはアクションパラメータを使用して、argparseでこれを実行する方法はありますか。引数を解析する前に検索を行い、例外状況が発生した場合でも、コマンドライン引数によって必要なファイルが提供される可能性があるため、それを発生させることはできません。パーサーが必要なパラメーターを満たしていない場合にアクションを実行することを考えましたが、argparse でそれを行う方法を見つけることができません。