标签: argparse

如何访问 argparse 键名而不是值?

Acallee.py有这个Namespace使用它的argparse

parser = Namespace(action='run', action_area='park', severity='high')

In [30]: parser.action
Out[30]: 'run'
Run Code Online (Sandbox Code Playgroud)

如果你在命令行中输入,这应该足够了:

callee.py --run --action_area gym --severity low
Run Code Online (Sandbox Code Playgroud)

如果调用在另一个程序中caller.py,我想这样做:

callee.py sth.run sth.action_area 'gym' sth.severity 'low'
Run Code Online (Sandbox Code Playgroud)

优点是:更规范更容易更新如果 argscallee.py发生变化

我希望sth来自argparse或我不必自己编码的东西。

我可以这样构建sth

class ParserKeys(object):
    def __init__(self, keys):
        self.keys = keys
        for key in keys:
            setattr(self, key, '--{0}'.format(key))

sth = ParserKeys(vars(parser).keys())

In [91]: sth.action
Out[91]: '--action'
Run Code Online (Sandbox Code Playgroud)

我的问题是:有没有一种argparse方法可以让我不必为此构建一个类?

这只是一个解释要求的例子,如何实现这一点不限于argparse如果功能不可用(我认为应该)。

我确信我不是第一个也是最后一个需要此功能的人。我希望这次我解释清楚。

python argparse

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

Argparse不会解析我在命令行中传递的任何参数

我正在尝试在终端中运行我的程序:

py program.py -t
Run Code Online (Sandbox Code Playgroud)

并且它没有将布尔值设置为False.从我所看到的,我的所有代码看起来都是正确的.

isTitle = True

a = argparse.ArgumentParser(prog='program.py', usage='%(prog) [options]', description='The fooiest of bar')
a.add_argument('-t', '--title', action='store_const', const=False, dest='isTitle', help='show title')
r = a.parse_args()
Run Code Online (Sandbox Code Playgroud)

我在parse_args之后有一个语句,它打印了isTitle boolean来验证它已被设置,并且它总是返回True.你们有什么建议吗?如果需要,我可以添加更多代码/诊断语句.谢谢!

python command-line-interface argparse python-3.x

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

AttributeError:命名空间对象没有属性“accumulate”

这是我当前的代码:

parser = argparse.ArgumentParser(description='Optic disc segmentation.')
parser.add_argument('-f', dest='file', action='store', type=str, help='The image to process.')
args = parser.parse_args()
print(args.accumulate(args.integers))
Run Code Online (Sandbox Code Playgroud)

我在最后一行不断收到此错误:

AttributeError: 'Namespace' object has no attribute 'accumulate'
Run Code Online (Sandbox Code Playgroud)

python argparse

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

为什么 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
查看次数