在主题中,我想
import argparse
parser = argparse.ArgumentParser()
parser.add_argument( "input" )
args = parser.parse_args() # <--- breaks if one of the optional arguments given
parser.add_argument( "-o", "--output", action="store", default=args.input+".out" )
parser.add_argument( "-s", "--skip-fields", action="store", default=1 )
args = parser.parse_args()
可能的解决方案可能是在声明可选参数之前插入args = parser.parse_args()
,但如果实际给出了任何可选参数,它会破坏代码。
可以吗?
答案 0 :(得分:2)
也许你可以给可选参数一个默认的None
或类似的东西,然后在后面的参数处理中替换它?
import argparse
parser = argparse.ArgumentParser()
parser.add_argument( "input" )
parser.add_argument( "-o", "--output", action="store", default=None)
args = parser.parse_args()
if args.output is None:
args.output = args.input+".out"
print args
您甚至可以省略default=None
,因为default
的{{3}}为None
。
快速测试:
In [2]: run test.py my_filename
Namespace(input='my_filename', output='my_filename.out')
答案 1 :(得分:1)
将第一个parse_args
替换为
args,rest = parser.parse_known_args()
现在parser
处理input
,但忽略了其余部分(实际上将其放在rest
中)。
但是,在完成argparse
后有条件地设置默认值也应该可以正常工作。从概念上讲,它可以更简单。
想想在出现错误时您想看到什么,或者您寻求帮助。是否需要设置默认值?