不识别Python中的命令行参数

时间:2015-03-09 06:24:12

标签: python command-line-arguments

我正在尝试根据函数返回的某些值添加命令行参数。当我不提出这个论点时,它说:

main.py: error: argument -opp/--operator is required

当我发表论据时,它说:

main.py: error: unrecognized arguments: -opp +

以下是一段EDITED代码(如其中一个答案中所述):

parser.add_argument('-z', help='Help msg', required=True)
args, unknown = parser.parse_known_args()
value = some_functions(args.z)
if value == some_particular_value:
    parser.add_argument('-opp','--operator',help='Some help msg',required=True)
args = parser.parse_args()

请帮我添加这个论点。谢谢!

1 个答案:

答案 0 :(得分:2)

但是,您的代码中存在一些错误。这是更正后的版本:

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('-z', help = 'Help msg', required = True)

args, _ = parser.parse_known_args()

# value = some_functions(args.z)

if value == some_particular_value:
    parser.add_argument('-opp', '--operator', help = 'Some help msg', required = True)

    # args2, _ = parser.parse_known_args()
    # some_function2(args2.operator)

所以,让我们分析你的错误:

分配而不是比较

这是典型的新手错误。在条件运算符(ifcase ...)中,您设置值,而不是检查。不同之处在于=符号的数量。

如果指定值,则运算符中的条件将始终为True,并且测试将始终成功(在大多数编程语言和案例中)。

检查出来:

a = 1

if a = 2:
  print a

这个可能以某些语言(如C或Java;使用正确的语法)打印2。为什么?你刚刚设定它!然而,Python足够聪明地告诉你你的错误:

File "<stdin>", line 1
    if a = 2:
         ^
SyntaxError: invalid syntax

并将其与此进行比较:

a = 1

if a == 2:
  print a

这不会打印任何内容。因为if测试未通过。

分配值而不是调用方法

您希望使用方法add_argument而不是重新定义parser变量,对吗?

parser = add_argument(...)

这就像我上面所描述的那样。您应该调用parser变量的方法,而不是定义其新值:

parser.add_argument(...)

缺少重新解析参数?

您没有显示检查operator参数的代码部分。注意:在定义新参数时,您应该再次解析参数:

parser.add_argument(...)
args, _ = parser.parse_known_arguments()

然后,您将在args变量中获得一个新参数。

使用错误的参数名称?

同样,您缺少部分代码,在那里检查operator参数'值。如果您尝试使用

访问它
args.opp # whoops...

然后你会收到一条错误There's no argument 'opp'!,因为它有全名,应该用它来访问:

args.operator # aaah, here it is!