Argparse 和 unittest.main()

Tim*_*ott 2 python argparse python-unittest

我刚刚在单元测试中添加了一个图形实用程序——基本上,测试的全自动版本只是进行数值比较,但我希望人们能够要求绘图。

如果我使用我的新参数,仅仅使用 argparseunittest.main()就会令人窒息。我目前正在做的是检查该参数,然后从中删除它sys.argv似乎是错误的

有没有更好的方法给这只猫剥皮?

  • 一种告诉 argparse 使用 sys.argv 参数的方法。可能还是错的,但不是我做的,所以没关系。
  • 一种告诉 argparse 吐出 sys.argv 版本并删除所有“使用的参数”的方法 - 这会很酷,因为它看起来unittest.main()会采用备用 argv。
  • 一种告诉unittest.main()忽略争论的方法。
if __name__ == '__main__':
    parser = argparse.ArgumentParser(
        description='Test correction'
    )
    parser.add_argument(
        '--plot-results',
        help='Plot results of cal test',
        action='store_true'
    )
    args = parser.parse_args()

    if args.plot_results:
        while '--plot-results' in sys.argv:
            sys.argv.remove('--plot-results')

    unittest.main()
Run Code Online (Sandbox Code Playgroud)

che*_*ner 6

Argument.parse_known_args基本上是您的第二个选择:解析您定义的参数,并返回您不认识的参数以传递给unittest.main.

if __name__ == '__main__':
    parser = argparse.ArgumentParser(
        description='Test correction'
    )
    parser.add_argument(
        '--plot-results',
        help='Plot results of cal test',
        action='store_true'
    )
    args, remaining = parser.parse_known_args()

    # Restore the script name which parse_known_args() also stripped.
    remaining.insert(0, sys.argv[0])
    unittest.main(argv=remaining)
Run Code Online (Sandbox Code Playgroud)

可能不言而喻,但不要添加任何parser与自身使用的解析器冲突的参数unittest。这些(大部分?)记录在此处