如何解决手动传递 argv 时,如何让 ArgumentParser 表现相同
我想重构一个我必须维护的参数解析函数,并使用从测试套件传递的参数来测试我调用它的更改,但发现代码的行为与使用 {{1} 时不同} 默认情况下 这是显示问题的最小复制品。
- 使用默认值 (sys.argv):
sys.argv
我得到了这样的称呼:
import argparse
import sys
def parse_args():
parser = argparse.ArgumentParser()
parser.add_argument("-f",dest="foo",required=True,help="Set Foo")
parser.add_argument('inputfiles',nargs=argparse.REMAINDER)
print("Parsing arguments: {}".format(sys.argv))
args = parser.parse_args()
print("Args: {}".format(args))
if __name__ == '__main__':
parse_args()
正如预期的那样。
- 将 sys.argv 作为参数传入(即根据我的理解,它应该使用相同的输入)并使用参数而不是默认值。
$ python ./test_argparse_def.py -f foo bar fizzbuzz
Parsing arguments: ['./test_argparse_def.py','-f','foo','bar','fizzbuzz']
Args: Namespace(foo='foo',inputfiles=['bar','fizzbuzz'])
这给出:
def parse_args(argv):
parser = argparse.ArgumentParser(prog=argv[0])
parser.add_argument("-f",nargs=argparse.REMAINDER)
print("Parsing arguments: {}".format(argv))
args = parser.parse_args(argv)
print("Args: {}".format(args))
if __name__ == '__main__':
parse_args(sys.argv)
提供了 -f 时会出现意外错误。
我是否在这里错误地使用了 ArgumentParser,有没有办法让它在第二种情况下的行为与第一种情况相同? 我已经确认问题出现在 python 3.5 和 python 3.7
解决方法
使用
if __name__ == '__main__':
parse_args(sys.argv[1:]) <-- changed
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。