Argparse:期待一个论点

时间:2012-06-12 15:36:04

标签: python argparse

我以下列方式设置了argparse参数:

parser = argparse.ArgumentParser(description='foobar')
parser.add_argument('url', metavar='URL')
parser.add_argument('-k', dest='kindle_type', default='kindle3')
parser.add_argument('-n', dest='gallery_name', default='Gallery')
parser.add_argument('-d', dest='dropbox_dir')
args = parser.parse_args()

print parser.parse_args(['imgur_url', '-k'])

但是,当我运行script.py -k kindledx http://url.com时,我得到以下内容 错误:gallery2kindle.py: error: argument -k: expected one argument

当我在'-k'标志后使用'kindledx'时,是不是被称为参数?

2 个答案:

答案 0 :(得分:7)

  

当我在'-k'标志后使用'kindledx'时,是不是被称为参数?

确实如此,如果您在print args之后添加args = parser.parse_args(),则可以看到解析有效:

~/coding$ python ap.py -k kindledx http://url.com
Namespace(dropbox_dir=None, gallery_name='Gallery', kindle_type='kindledx', url='http://url.com')

但在这一行

print parser.parse_args(['imgur_url', '-k'])

将参数传递给k。比较

print parser.parse_args(['imgur_url', '-k', 'kindledx'])

产生

Namespace(dropbox_dir=None, gallery_name='Gallery', kindle_type='kindledx', url='imgur_url')

答案 1 :(得分:0)

由于这是搜索该错误的第一个结果,因此我想分享一下,如果您遵循建议与Linux中的Windows /兼容,则可能会发生这种情况:

arg_parser = argparse.ArgumentParser(
    prefix_chars='-+/', description='desc')

这会导致-option /path/path抛出expected one argument,尽管看起来有效。您需要将其引用为-option '/path/path'或删除上面/中的prefix_chars来解决。