2011-12-10 45 views
1

我需要一些关于使用argparse的帮助。我想实现的是我只需要传入一个参数,它可以是以下之一:--k, --r, --b, --p,(ignore the rest)。如果参数计数不是1,则输出“用法”信息并退出。此外,该程序需要知道哪个标志传入以创建相应的对象。我尝试了几次,但我不工作,任何人都可以给我一个提示吗?谢谢。需要帮助python命令行参数使用argparse

+3

“我尝试了几次,但我不工作”:你能发表你试过的东西,并解释什么是行不通的吗? –

回答

4

你需要使用来实现这一目标什么是mutually exclusive group

import argparse 

parser = argparse.ArgumentParser() 
group = parser.add_mutually_exclusive_group() 
group.add_argument('-k', action='store_true') 
group.add_argument('-r', action='store_true') 
group.add_argument('-b', action='store_true') 
group.add_argument('-p', action='store_true') 
parser.parse_args() 

因为它可以在下面的例子中可以看出,在一个互斥组只有一个选项,允许在同一时间:

$ python test.py -k -r -b -p 
usage: test.py [-h] [-k | -r | -b | -p] 
test.py: error: argument -r: not allowed with argument -k 

要检查哪些标志传递,你只需要看看由parse_args方法(标志p返回argparse.Namespace对象将被设置为True)。

+0

干得好!看起来我完全是在错误的轨道上,thx为样本! –

3

如何根本不使用​​?这似乎并不是必要的。

if len(sys.argv) != 2: 
    print_usage() 
arg = sys.argv[1] 
if arg not in ["--k", "--r", "--b", "--p"]: 
    print_usage() 
# Do whatever you want with arg 
+0

这也没关系! –