相关疑难解决方法(0)

如何用argparse读取命令行的剩余部分?

首先,我很抱歉这个糟糕的头衔.我无法正确制定摘要的事实可能是我当前问题的80%.

我正在编写一个命令行程序来包装其他命令行程序,如下所示:

my_wrapper.py --some options -for --the wrapper original_program --and its -options
Run Code Online (Sandbox Code Playgroud)

在某些情况下,此命令将替换原始程序的调用:

original_program --and its -options
Run Code Online (Sandbox Code Playgroud)

我想提取包装器所需的选项,但保持原始程序名称和参数不变,顺序完全相同.我不能对包装程序的参数做出任何假设.

用argparse可以做到吗?如何?

我认为使用(已弃用)optparse模块就像args从行中读取一样简单

 (options, args) = parser.parse_args()
Run Code Online (Sandbox Code Playgroud)

对于好奇的,包装器的目标是帮助用户在HPC群集上提交作业.它的职责是照顾我们编写自定义脚本,启动它和检索结果的所有特殊要求.

python command-line-arguments argparse

3
推荐指数
1
解决办法
1862
查看次数

Python argparse以不同的方式处理参数

我想创建一个可选参数,它将是'-- '(双破折号和空格)并将其后的所有内容作为其值.问题是之后可能会出现一些其他可选参数'-- '.我不希望这些被解析为可选参数,而是作为值的值'-- '.例如:

python prog1 --foo 1 --bar 2
Run Code Online (Sandbox Code Playgroud)

这里foobar是分别是值1和值的可选参数2

python prog1 --foo 1 --bar 2 -- --foo 4 --bar 14
Run Code Online (Sandbox Code Playgroud)

在这里我希望foo并且bar之前'-- '被解析为可选参数.但是我希望'--foo 4 --bar 14'将其解析为可选参数的值'-- '.我想这样做没有重命名而来后的参数'-- ',以foo2bar2,如果可能的话.

这可能吗?这怎么可能实现?

python arguments argument-passing command-line-arguments

2
推荐指数
1
解决办法
1497
查看次数

argparse 接受随机参数

我有一个 Python 应用程序,它argparse使用声明的一组参数来实现:

if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument(
        "--arg1",
        default="dev",
        choices=["real", "test", "dev"],
        help="arg 1"
    )
    parser.add_argument("--arg2", default="0", help="arg 2")
    parser.add_argument(
        "--arg3",
        nargs="+",
        default=["one", "two"],
        choices=["one", "two"],
        help="arg 3",
    )
    parser.add_argument("--arg4", action="store_true", help="arg 4")
    parser.add_argument("--arg5", action="store_true", help="arg 5")
    parser.add_argument("--arg6", action="store_true", help="arg 6")
    parser.add_argument("--arg7", default=None, help="arg 7")

    args = parser.parse_args()
Run Code Online (Sandbox Code Playgroud)

如果我发送这些声明中未定义的参数,则会出现以下异常:

error: unrecognized arguments: arg8 value
Run Code Online (Sandbox Code Playgroud)

是否可以指示argparse接受未声明的参数?

python argparse

0
推荐指数
1
解决办法
55
查看次数

为什么 Python `argparse` 停止记录 nargs=REMAINDER?

在 Python 模块的文档中argparse3.8 文档指出nargs可以设置为:

\n
\n

argparse.REMAINDER。所有剩余的命令行参数都收集到一个列表中。这对于分派到其他命令行实用程序的命令行实用程序通常很有用。

\n
\n

这已从3.9 文档中删除,尽管没有提到它已被弃用,也没有任何充分的理由这样做,因为它提供了其他方式显然没有提供的有用功能。\xc2\xb9 它的存在在页面的其他地方仍然提到

\n
\n

这些[混合]解析器不支持所有 argparse 功能,如果使用不支持的功能,则会引发异常。特别是,不支持子解析器、argparse.REMAINDER 以及包含可选值和位置值的互斥组。

\n
\n

但即使如此,[3.10 文档] 中也删除了这一点。然而,即使在最新发布的 Python 3.11.4 版本中,该功能仍然存在。

\n

那么为什么它从文档中删除了呢?

\n
\n

我问这个问题是因为这个答案似乎可能直接关系到我关于用 Python 编程参数解析器的其他几个相关问题。(我曾经、现在和可能继续使用的特定情况nargs=REMAINDER足够大,我认为如有必要,它们应该作为单独的问题发布。)考虑因素包括:

\n
    \n
  • 为了我的目的,API 是否在某种程度上被破坏了,这是否意味着我使用它的代码也被破坏了?
  • \n
  • 我应该寻找这个 API 的替代品吗?
  • \n
  • 我应该在新代码中继续使用这个 API 吗?毕竟,它还没有被弃用。
  • \n
  • 我是否应该将使用此 API 的现有代码转换为使用其他内容?
  • \n
\n

(另请注意,此类问题的答案不仅取决于特定的上下文nargs=REMAINDER使用的特定上下文,而且还可能被视为意见问题,这是将它们超出本问题范围的另一个原因。)

\n
\n

\xc2\xb9nargs=REMAINDERnargs=\'*\': using不同,using 意味着 argparse从那时起REMAINDER不会尝试解析选项(以 …

python argparse

-4
推荐指数
1
解决办法
245
查看次数