Python参数解析器-需要以下参数--name

时间:2019-07-16 14:32:04

标签: python python-3.x argparse

当我运行以下代码时:

def read_args():
    parser = default_parser()
    parser.add_argument('--tensorboard-dir', type=str, default='/tmp/cifar10/tensorboard')
    parser.add_argument('-N', type=int, default=50000, help="Use N training examples.")

    return parser.parse_args()

def main():
    flags = readargs()

我有以下错误输出:

以下参数是必需的:--name

puts()

但是,当我添加--name参数时:

def read_args():
    parser = default_parser()
    parser.add_argument('--name', type=str, default='cifar10test')
    parser.add_argument('--tensorboard-dir', type=str, default='/tmp/cifar10/tensorboard')
    parser.add_argument('-N', type=int, default=50000, help="Use N training examples.")

    return parser.parse_args()


def main():
    flags = readargs()

也在制造问题。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

看来default_parser包含一个必需的--name自变量。在第二个示例中,您要做的是两次定义参数-一次在default_parser中,一次在程序中。相反,从命令行调用程序时应该传递--name参数。

示例:

python cifar.py -N=1200 --tensorboard-dir=file.txt --name=cool_name

或者,您可以删除default_parser并构造自己的ArgumentParser:

`parser = argparse.ArgumentParser()`

完整的演示版本:

import argparse

def read_args():
    parser = argparse.ArgumentParser()
    parser.add_argument('--tensorboard-dir', type=str,
                        default='/tmp/cifar10/tensorboard')
     parser.add_argument('-N', type=int, default=50000,
                         help="Use N training examples.")

     return parser.parse_args()

def main():
    flags = vars(read_args())
    # You can access your args as a dictionary
    for key in flags:
        print("{} is {}".format(key, flags[key]))

main()

解析器返回一个Namespace对象,但是我们可以使用vars(Namespace)访问其(更简单的)内部字典。然后,您可以通过访问字典来获取参数,例如flags['N']。请注意,tensorboard-dir在您的Python程序to avoid issues with the subtraction operator中变成了tensorboard_dir

从命令行调用它(我正在使用Bash):

python cifar.py -N=1200 --tensorboard-dir=file.txt

输出:

tensorboard_dir is file.txt
N is 1200