【问题标题】:Argparse module with multiple command and arguments具有多个命令和参数的 Argparse 模块
【发布时间】:2021-09-24 16:47:37
【问题描述】:

我正在尝试使用 python 3 内置 argparse 模块解析带有参数的命令。 我已经部分阅读了argparse documentation,但是,我找不到任何符合我要求的东西。 我将参数解析为输入(我有我的理由)。 我有多个命令,每个命令都有必要参数和可选参数。

例如:

restart --name(名称被替换)

restart 是命令,name 是基本参数。

目前我的代码将计算输入中的“--”并使用相应的布尔值调用函数(如果--all给定,is_all布尔参数将为真)

我还可以添加一个可选参数--all(全部不替换)。

【问题讨论】:

  • 请给我们一些代码,以便我们更好地帮助您
  • 我没有,最近才知道这个模块。
  • “我将参数解析为输入”到底是什么意思?
  • 你会使用什么代码没有 argparse?
  • 我正在解析用户的输入,而不是命令行参数。

标签: python argparse


【解决方案1】:

听起来你正在寻找类似的东西

def get_arguments():
    parser = argparse.ArgumentParser()
    parser.add_argument("--arg1", required=False, default=None)
    parser.add_argument("--arg2", required=False, default=None)
    return parser.parse_args()

args = get_arguments()

if args.arg1:
    # do something

如果没有看到您想要的代码或示例,真的很难回答这个问题。

【讨论】:

    【解决方案2】:

    我假设您正在做一些类似于外壳的事情。我还将假设输入的每一行都有一个命令,每个命令都有自己的参数。

    from argparse import ArgumentParser
    
    def get_parser(cmd):
        '''Returns a parser object for a given command'''
        # Instantiate the parser object, add the appropriate arguments for the command
        return parser  # This is an example -- you need to instantiate it
    
    def main():
        while True:
            try:
                in_line = input('> ')
                if not in_line.strip():  # Quit if empty
                    break
                args = in_line.split()
                parser = get_parser(args[0])
                opts = parser.parser_args(args)
                # Do stuff with opts depending on command
            except EOFError:
                break
            except SystemExit:
                pass  # Prevent failures from killing the program by trapping sys.exit()
    

    【讨论】:

    • 我正在尝试做类似 shell 的事情,但我坚持的部分是例如我有命令“ls”,它不是命令而是参数,对于 ls 有可选的参数,例如 -l。我该如何解析它?我可以写一个例子。
    • 嗯。我认为您需要提供“ls”部分之外的示例。换句话说,如果您将一个字符串列表传递给 argparse,它会将其视为通过命令参数进行解析。这可能只是对您的输入进行分区的问题,以便您可以将“ls”部分视为一个命令。然后,您可以使用包括“ls”在内的参数列表。我认为这取决于您如何设计输入。
    • 我只是给出了一个类 Unix 操作系统命令“ls”的通用示例。
    • 那么我是否正确假设用户只是要使用其选项键入“ls”?如果您使用必需和可选参数设置 ArgumentParser,那么这应该会处理它。
    猜你喜欢
    • 2020-10-23
    • 2017-08-13
    • 2018-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-20
    • 2012-01-29
    • 2012-01-05
    相关资源
    最近更新 更多