Python argparse:参数太少

Posted

技术标签:

【中文标题】Python argparse:参数太少【英文标题】:Python argparse: Too few arguments 【发布时间】:2018-07-09 10:21:33 【问题描述】:

这是我的代码:

def parse_args():
    parser = argparse.ArgumentParser(description='Simple training script for object detection from a CSV file.')
    parser.add_argument('csv_path', help='Path to CSV file')
    parser.add_argument('--weights', help='Weights to use for initialization (defaults to ImageNet).', default='imagenet')
    parser.add_argument('--batch-size', help='Size of the batches.', default=1, type=int)

    return parser.parse_args()

当我运行我的代码时,我得到一个错误:

usage: Train.py [-h] [--weights WEIGHTS] [--batch-size BATCH_SIZE] csv_path
Train.py: error: too few arguments

知道我哪里出错了吗?

【问题讨论】:

显然您在运行程序时使用的参数太少。你使用什么论据? ***.com/questions/33102272/… - 听起来您不知道如何使用命令行参数调用脚本。这是pycharm中有关如何执行此操作的SO。 【参考方案1】:

这是因为您没有使用 nargs 指定每个标志后预期的参数数量,如下所示:

import argparse

def parse_args():
    parser = argparse.ArgumentParser(description='Simple training script for object detection from a CSV file.')
    parser.add_argument('csv_path', nargs="?", type=str, help='Path to CSV file')
    parser.add_argument('--weights', nargs="?", help='Weights to use for initialization (defaults to ImageNet).', default='imagenet')
    parser.add_argument('--batch-size', nargs="?", help='Size of the batches.', default=1, type=int)

    return parser.parse_args()
parse_args()

根据文档:

If the nargs keyword argument is not provided, the number of arguments consumed is determined by the action. Generally this means a single command-line argument will be consumed and a single item (not a list) will be produced.

'?'. One argument will be consumed from the command line if possible, and produced as a single item. If no command-line argument is present, the value from default will be produced. Note that for optional arguments, there is an additional case - the option string is present but not followed by a command-line argument. In this case the value from const will be produced. Some examples to illustrate this:

详情here

【讨论】:

你不需要指定'?'对于标记的参数,除非您需要 const 参数提供的 3 路开关。 “?”对于一个位置应该有一个有意义的default【参考方案2】:

第一个参数csv_path 是必需的(您没有提供一些默认值),因此您需要将其传递给您的命令行,如下所示:

python Train.py some_file.csv  # or the path to your file if it's not in the same directory

【讨论】:

我可以在csv_path 行插入什么? 例如:'home/hoang/coco' ?? @Wiliam 是的,你的 csv 路径,如果你的 csv 文件在同一个文件夹中,你可以指定名称 ValueError: 无效的选项字符串'csv_path': 必须以字符'-'开头 我用 Pycharm 运行【参考方案3】:

试试这个:

import argparse
import sys
import csv

parser = argparse.ArgumentParser()
parser.add_argument('--file', default='fileName.csv')
args = parser.parse_args()
csvdata = open(args.file, 'rb')

【讨论】:

请始终将您的答案放在上下文中,而不仅仅是粘贴代码。有关详细信息,请参阅here。

以上是关于Python argparse:参数太少的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Windows 上为 python 2.5 导入 argparse 1.2.1

python命令行参数模块argparse

python argparse 带多于的参数问题

python中的argparse包——用于解析命令行参数

Python 处理脚本的命令行参数:使用argparse

Python学习之Argparse 解析脚本参数详解