【发布时间】:2019-02-16 08:08:05
【问题描述】:
我已经编写了一个代码,我希望输入文件作为命令行参数。我希望用户以两种方式提供:
-
使用标志 --input,例如:
python3 prog.py --input A.cpp
-
没有任何标志
python3 prog.py A.cpp
两者应该是一样的。
我使用 argparse 为它编写了一个程序。
#!/usr/bin/env python3
import argparse
if __name__ == "__main__":
parser = argparse.ArgumentParser()
input_file = parser.add_mutually_exclusive_group()
input_file.add_argument('inp',nargs='?',help='file name')
input_file.add_argument('--input',dest='inp',help='file name')
args = parser.parse_args()
print(args)
它适用于:
$ python3 prog.py A.cpp
Namespace(inp='A.cpp')
虽然不是:
$ python3 prog.py --input A.cpp
Namespace(inp=None)
我希望这两种方式是互斥的,并且它们的价值可以保存到目的地(就像我在这里做的inp)。一个人可以跳过两者。表示它们不是必需的。
我怎样才能实现它?
【问题讨论】:
-
那是一个糟糕的 CLI。选择其中一种方式即可,不要一厢情愿。
-
你能不能给我一些其他的建议。我认为它对用户很友好,因为我的程序的早期版本不支持标志,所以用户习惯了
python3 prog.py A.cpp,我想在不删除旧方式的情况下添加对 argparse 的支持 -
您是否尝试先定义标记的参数?或者使用相同的
dest可能是问题所在。位置的默认值可能会覆盖可选的值。我不认为mutual_exclusive 组有问题。但我必须运行一些测试用例才能确定。 -
是的,我通过在代码中切换两行的位置来尝试这两种组合
标签: python-3.x command-line-arguments argparse