无法识别Python argparser

时间:2018-11-16 23:07:35

标签: python

我正在尝试编写一个从用户那里获取一个参数的python脚本。 如果输入不属于可能的输入列表,我想抛出一条消息。 但是,尽管提供了正确的输入,但我仍然收到“未知方向...”消息。有什么问题为什么不将这些值与known_directions列表进行比较?

import argparse

known_directions = ['start', 'stop', 'left', 'right', 'forward', 'back']

class Direction(argparse.Action):
    def __call__(self, parser, namespace, values, option_string=None):
        direction = values
        if direction.lower() not in known_directions:
            parser.error("Unknown direction. Available direction are 'start', 'stop', 'left', 'right', 'forward', & 'back'")
        namespace.direction = direction.lower()


def create_parser():
    parser = argparse.ArgumentParser(description="""
    Control the movement of your bot.
    """)
    parser.add_argument('--direction', '-d',
                        help='which direction to move',
                        nargs=1,
                        metavar=("DIRECTION"),
                        action=Direction,
                        required=True)
    return parser

parser = create_parser()
parser.parse_args()

2 个答案:

答案 0 :(得分:2)

从python文档-https://docs.python.org/3/library/argparse.html#nargs

  

请注意,nargs = 1会产生一项的列表。这不同于   默认情况下,商品是由其自身生产的。

您需要制作<form action="/login" method="POST"> <p">Username</p> <input type="text" name="username" placeholder="Enter Username"> <p>Password</p> <input type="password" name="password" placeholder="Enter Password"> <input type="submit" name="" value="Login"> </form>

此外,您可能希望查看choices关键字参数来做到这一点。

direction = values[0]

答案 1 :(得分:2)

您可以只使用choices中的add_argument kwarg为您完成此操作。

https://docs.python.org/2/library/argparse.html#choices