当我运行以下代码时:
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
但是,当我添加--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()
也在制造问题。
有什么想法吗?
答案 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