如何在运行时使用 argparse 有条件地获取进一步的输入?
How to use argparse during runtime to conditionally get further input?
我有一个带有父解析器的小脚本,它接受 create
或 run
参数。
在前一种情况下,我想从用户那里获得更多信息,但我想零碎地获得它,这样他们就不必在一开始就输入 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"])
我有一个带有父解析器的小脚本,它接受 create
或 run
参数。
在前一种情况下,我想从用户那里获得更多信息,但我想零碎地获得它,这样他们就不必在一开始就输入 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"])