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

How to use argparse during runtime to conditionally get further input?

我有一个带有父解析器的小脚本,它接受 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 强大的能力来智能管理输入而不是自己全部写。例如,整数将不是对 "What is your first and last name?".

的可接受响应

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"])