具有默认值

时间:2017-11-28 03:31:33

标签: python argparse

python和法语的新手很抱歉任何英语错误:)。 我正在做一些我需要使用argparse的东西。 这是我遇到问题的代码:

mission.py

parser = argparse.ArgumentParser()
parser.add_argument('--create n file', dest='create', nargs=2,
default=(1,'world1.json'), help='Create a party of n player with mission parameters in file')

我正在尝试找到一种方法来将n和file都设置为其他值,或者只设置其中一个。 n是一个int并提交一个str。

以下是我想要使用以下命令获得的内容:

python mission.py - 创建2 ##期望结果> create = [2,'world1.json']

python mission.py - 创建world2.json #expected result> create = [1,'world2.json']

python mission.py - 创建3 world2.json #expected result> create = [3,'world2.json']

当使用--create(有或没有指定n / file)时,我需要使用list作为参数启动一个函数。

我尝试过多次并多次阅读argparse文档但无法找到方法。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

以下代码返回列出的用例的预期结果。我决定使用额外的函数来处理参数,因为程序必须接受传递的第一个参数的int或字符串。

我使用"尝试"阻止查看在继续之前是否可以将单个参数解析为int。

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--create n file', dest='create', nargs='+', default=(1,'world1.json'),
                    help='Create a party of n player with mission parameters in file')
args = parser.parse_args()

def get_n_file(arg):
    if len(arg)==1:
        try:
            i = int(arg[0])
            result = int(arg[0]), 'world'+str(arg[0])+'.json'
        except:
            s = arg[0]
            result = 1, s
        return result
    elif len(arg)==2:
        return int(arg[0]), arg[1]

print(args.create)

n, f = get_n_file(args.create)

print(n, f)