gpt4 book ai didi

python - 如何在运行时使用 argparse 有条件地获取进一步的输入?

转载 作者:行者123 更新时间:2023-11-30 23:06:26 24 4
gpt4 key购买 nike

我有一个带有父解析器的小脚本,它接受 createrun 参数。

在前一种情况下,我想从用户那里获取更多信息,但我想逐步获取这些信息,这样他们就不必在一开始就输入包含 15 个参数的字符串。我可以创建下一个解析器,但是当我向它传递一个来自 raw_input() 的字符串时,每个字符都被视为一个参数,这让我相信我做错了:

parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(title='subcommands', help='additional help')

create_parser = subparsers.add_parser('create')
create_parser.set_defaults(func=create)

run_parser = subparsers.add_parser('run')
run_parser.set_defaults(func=run)

def create():
author_parse = argparse.ArgumentParser()
author_parse.add_argument('name', type=str, nargs=2)
auth_args = auth_parse.parse_args(raw_input("Provide your first and last name:"))


# >> myprogram run
# >> Provide your first and last name:
# >> john smith
# >> error: unrecognized arguments: h n S m i t h

编辑:对于那些想知道为什么我不只是使用 raw_input() 的人来说,这是因为我将经历几轮从用户那里获取更多信息,并希望利用 argparse 的强大能力来智能地管理输入,而不是自己编写所有内容。例如,对于“您的名字和姓氏是什么?”,整数不是可接受的响应。

raw_input() 是我所知道的在运行时从用户那里获取响应的唯一方法,这也是我调用它的唯一原因。

最佳答案

argparse.parse_args() 接受一个可迭代的字符串;你正在传递一个字符串。尝试一下

def create():
author_parse = argparse.ArgumentParser()
author_parse.add_argument('name', type=str, nargs=2)
name = raw_input("Provide your first and last name: ")
auth_args = auth_parse.parse_args(name.split())

字符串本身是可迭代的,被视为字符串中的字符列表。也就是说,

auth_parse.parse_args("John Smith")

产生与

相同的结果
auth_parse.parse_args(["J", "o", "h", "n", " ", "S", "m", "i", "t", "h"])

关于python - 如何在运行时使用 argparse 有条件地获取进一步的输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32659345/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com