问题1的答案
“有没有可能。。。位置参数?”好吧,如果你这么做了,那么它们就不再是位置论了!因为所有的位置参数都是通过处于适当的位置来定义的,而不是通过标记来定义的。在
我认为您真正需要的是required选项,不要试图太聪明地使用位置参数。你的目标是创建一个惊人的聪明的接口,不管输入是什么,它都能神奇地解决你想要的是什么,还是一个可以预见地工作并产生好的错误消息的接口?在
在这一点上我可以讽刺,因为我过去花了太多时间做第一件事,而不是只做第二件事。
为什么不这样:
在测试.pyimport argparse
parser = argparse.ArgumentParser()
parser.add_argument(' files', required=True, nargs='+')
parser.add_argument(' genes', required=True, nargs='+')
parser.add_argument(
' pos', required=True, nargs='+', type=int, help="position(s) to analyze")
opts = parser.parse_args()
print(dir(parser))
print('files: %s, genes: %s, poses: %s' % (
opts.files, opts.genes, opts.pos))
所以:
^{pr2}$
问题2的答案
你不是在问“这里最好的界面是什么”?当然这是你需要决定的。我的建议是:保持简单。为什么不:parser.add_argument(' start', '-s', required=True, nargs=1, type=int)
parser.add_argument(' end', '-e', nargs=1, type=int)
opts = parser.parse_args()
if opts.end is None:
opts.end = opts.start + 1