为啥 argparse 不接受参数并打印新的“魔术”用法?

Posted

技术标签:

【中文标题】为啥 argparse 不接受参数并打印新的“魔术”用法?【英文标题】:Why argparse do not accept arguments and prints new "magic" usage?为什么 argparse 不接受参数并打印新的“魔术”用法? 【发布时间】:2018-07-05 15:03:58 【问题描述】:

我使用 argparse 编写了一个小 Python 脚本来处理命令行选项。 它已经工作了,直到它突然表现得很奇怪。 现在它有时会拒绝我的论点并打印出不同的用法。 我使用 python3.4 在 Windows 8.1 上运行它 任何人都知道什么会造成这样的问题?

parser = argparse.ArgumentParser(description="Encodes or decodes a file or folder.")
parser.add_argument("-e", "--encode", action="store_true", help="Specify mode: encode")
parser.add_argument("-d", "--decode", action="store_true", help="Specify mode: decode")
parser.add_argument("-p", "--password", action="store", metavar="password", help="Specify password.")
parser.add_argument("-f", "--file", help="Specify file/folder.")
parser.add_argument("-t", "--test", action="store_true", help="Runs unittests.")
args = vars(parser.parse_args())

更新

如果是 -t 则执行以下代码:

testMode = args["test"]
#...
if (testMode):
    unittest.main()#this produced the error
    input("Press Enter to leave")
    exit()

解决方案:

testMode = args["test"]
#...
if (testMode):
    unittest.main(argv=[sys.argv[0]])
    input("Press Enter to leave")
    exit()

【问题讨论】:

你的代码用args.t做什么? 我自己已经解决了,只是前24小时接受不了。完整的帖子仅适用于可能遇到相同错误的其他人。 【参考方案1】:

如果是 -t 则启动单元测试:

unittest.main()

这产生了新的用法消息,因为它也使用了 argv 修复它使用

unittest.main(argv=[sys.argv[0]])

【讨论】:

以上是关于为啥 argparse 不接受参数并打印新的“魔术”用法?的主要内容,如果未能解决你的问题,请参考以下文章

打印所有 argparse 参数,包括默认值

使用 argparse 接受更多参数

使用 argparse 和 python 接受字典作为参数 [重复]

使用 argparse 打印命令行参数?

为啥直接调用 Python 脚本时 argparse 无法识别参数?

VSCODE支持argparser/接受命令行参数