和奇怪的命令行界面来解析参数

发布于 2025-01-02 12:31:45 字数 478 浏览 2 评论 0原文

我有一个 Python 程序的命令行界面,它有很多选项(例如 --a--b--c< /code>),但可以使用其他开关在命令之间切换。

因此,也许 prog -S ab c 调用 -S 操作,而 prog -Y ab c 调用 -Y代码> 操作。然后,prog -Y abc --a=2 --b=3 应使用参数 a调用 -Y 操作>b 和位置参数 abc

有没有办法使 argparsegetopt 为我解析参数吗?还有其他库可以很好地做到这一点吗?

I've got a command line interface for a Python program that has a bunch of options (say, --a, --b, --c) but one switches between commands with other switches.

So, perhaps prog -S a b c invokes the -S action, and prog -Y a b c invokes the -Y action. prog -Y a b c --a=2 --b=3, then, should invoke the -Y action with parameters a and b and positional argument a, b, c

Is there any way to make argparse or getopt do the argument parsing for me? Is there some other library to do this nicely?

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

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

发布评论

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

评论(2

呆萌少年 2025-01-09 12:31:45

我认为在这种情况下使用 argparse 的 子命令 会很有用。

基本上,您可以创建一个主解析器,负责解析子命令以及一些常见的常规选项,然后创建一些子解析器(每个子命令一个),负责解析传递给子命令的特定选项。

I think using argparse's subcommands would be useful in this case.

Basically you can create a main parser that takes care of the parsing of the subcommand together with some common general options and then a few subparsers (one for each subcommand) that take care of the parsing of the specific options passed to the subcommands.

讽刺将军 2025-01-09 12:31:45

我不完全确定这是否有帮助,但到目前为止,我一直在编写一个包装器,它从 Web 界面设置的 XML 中获取参数,然后将它们传递到命令中:

显然需要更复杂的参数字符串,但对于举个例子:

 def __main__():
 parser = optparse.OptionParser()
 parser.add_option( '-Q', '--ibmax', dest='ibmax', help='' )
 (options, args) = parser.parse_args()
 if options.ibmax != 'None' and int( options.ibmax ) >= 1:
                ibmax = '--bmax %s' % options.ibmax

 cmd1 = Popen([another.py, '-Q "%s"' % (options.ibmax),], stdout=PIPE).communicate()[0]
 process = subprocess.Popen(cmd1, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

根据我的网络界面中的某些标志,更多选项被添加到 arg 列表中,从而运行不同的命令。将每个命令选项添加到解析器,然后检查 -Y 或 -S 命令的值以设置变量并更改需要传递的命令。

我希望这有帮助,我不是 python 专业人士,这对我有用。

I'm not entirely sure if this will help, but so far, I have been writing a wrapper that takes arguments from XML set by a web interface, and then passes them into the command:

Obviously takes more complicated argument strings, but for the sake of an example:

 def __main__():
 parser = optparse.OptionParser()
 parser.add_option( '-Q', '--ibmax', dest='ibmax', help='' )
 (options, args) = parser.parse_args()
 if options.ibmax != 'None' and int( options.ibmax ) >= 1:
                ibmax = '--bmax %s' % options.ibmax

 cmd1 = Popen([another.py, '-Q "%s"' % (options.ibmax),], stdout=PIPE).communicate()[0]
 process = subprocess.Popen(cmd1, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

Depending on certain flags in my web interface, more options are added to the arg list and thus a different command is run. Add every command option to the parser and then check the value of the -Y or -S command to set vars and change which command you need to pass.

I hope this helps, I'm no python pro, this just works for me.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文