@Honza Osobneによる(現在受け入れられている)回答に対する@kcprのコメントに対処するため
残念ながらそれは機能しません、そして引数はそれが定義されたデフォルト値を得ました。
オプションをNamespace
提供するオブジェクトabd と比較することで引数が提供されているかどうかを最初に確認default=argparse.SUPPRESS
でき(@hpauljと@Erasmus Cedernaesの回答とこのpython3ドキュメントを参照)、提供されていない場合は、デフォルト値に設定します。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--infile', default=argparse.SUPPRESS)
args = parser.parse_args()
if 'infile' in args:
# the argument is in the namespace, it's been provided by the user
# set it to what has been provided
theinfile = args.infile
print('argument \'--infile\' was given, set to {}'.format(theinfile))
else:
# the argument isn't in the namespace
# set it to a default value
theinfile = 'your_default.txt'
print('argument \'--infile\' was not given, set to default {}'.format(theinfile))
使用法
$ python3 testargparse_so.py
argument '--infile' was not given, set to default your_default.txt
$ python3 testargparse_so.py --infile user_file.txt
argument '--infile' was given, set to user_file.txt
isset()
(:PythonはPHPではありませんヒント)も?hasattr()
代わりに、たぶん、という意味ですか?代わりに、オプションのデフォルトを設定するようにargparseを構成しないのはなぜですか?