Python-允许Argparse接受参数中的选项

发布于 2025-01-22 10:56:04 字数 870 浏览 1 评论 0原文

我一直在尝试将命令传递给ArgParse,但是传递pacman -r总是忽略-r。我正在使用.parse_known_args()尝试解决此问题,但它仍然不起作用。我还在使用nargs ='*'以具有未知数的参数
这是我所需的输出的想法:

>>> parser.parse_args() # Input: cmdname pacman -R sudo
['pacman', '-R', 'sudo']

当前输出:

>>> parser.parse_known_args() # Input: cmdname pacman -R sudo
['pacman']

如何将选项(例如-r -s)作为参数传递?是否使用.parse_args()或.parse_known_args()

编辑:示例代码:

import argparse

def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('arguments', nargs='*', help='Arguments to run')
    args, extra = parser.parse_known_args()

    commands = ''.join(args.arguments)
    print(args.arguments, extra)
    os.system(commands)

if __name__ == '__main__': main()

I've been trying to pass a command to argparse, however passing something like pacman -R always ignores -R. I'm using .parse_known_args() to try and solve this, but it still doesn't work. I'm also using nargs='*' to have an unknown amount of arguments
Here's an idea of my desired output:

>>> parser.parse_args() # Input: cmdname pacman -R sudo
['pacman', '-R', 'sudo']

Current output:

>>> parser.parse_known_args() # Input: cmdname pacman -R sudo
['pacman']

How would I pass options (e.g. -R -S) as an argument? It doesn't matter if you use .parse_args() or .parse_known_args()

Edit: Sample code:

import argparse

def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('arguments', nargs='*', help='Arguments to run')
    args, extra = parser.parse_known_args()

    commands = ''.join(args.arguments)
    print(args.arguments, extra)
    os.system(commands)

if __name__ == '__main__': main()

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

乱世争霸 2025-01-29 10:56:04
In [1]: import argparse
In [2]: parser = argparse.ArgumentParser()
   ...: parser.add_argument('arguments', nargs='*', help='Arguments to run')

argparse将'-r'解释为标志,因此参数只能将字符串获取到那一点。其余部分进入extras。这在argparse中深深根深蒂固:

In [3]: parser.parse_known_args('pacman -R sudo'.split())
Out[3]: (Namespace(arguments=['pacman']), ['-R', 'sudo'])

您可以使用' - '强制处理所有以下字符串作为参数

In [4]: parser.parse_known_args('-- pacman -R sudo'.split())
Out[4]: (Namespace(arguments=['pacman', '-R', 'sudo']), [])
In [5]: parser.parse_known_args('pacman -- -R sudo'.split())
Out[5]: (Namespace(arguments=['pacman', '-R', 'sudo']), [])
In [1]: import argparse
In [2]: parser = argparse.ArgumentParser()
   ...: parser.add_argument('arguments', nargs='*', help='Arguments to run')

argparse interprets '-R' as a flag, so arguments only gets the strings up to that point. The rest goes into extras. That's deeply ingrained behavior in argparse:

In [3]: parser.parse_known_args('pacman -R sudo'.split())
Out[3]: (Namespace(arguments=['pacman']), ['-R', 'sudo'])

You can use a '--' to force the handling of all following strings as arguments

In [4]: parser.parse_known_args('-- pacman -R sudo'.split())
Out[4]: (Namespace(arguments=['pacman', '-R', 'sudo']), [])
In [5]: parser.parse_known_args('pacman -- -R sudo'.split())
Out[5]: (Namespace(arguments=['pacman', '-R', 'sudo']), [])
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文