【发布时间】:2019-12-06 05:11:54
【问题描述】:
我正在做一个命令行应用程序,并希望通过带参数的命令支持用户输入。 我所有的谷歌搜索都指向 argparse 库,但这似乎只解析参数(-h、-m、-i...),而不是命令(cd、rm...)。 我想要类似 Windows 命令提示符(command ...)的东西。
我已经尝试过 argparse 库。我可以指定参数并且解析工作正常。
我还考虑过创建一个不需要值的参数并将其视为命令。 示例:-c --name 'Bob' --age 37 Argparse 说'-c' 是一个参数,但我会将它用作命令。其余参数将被解析为常规参数。 但这似乎很老套,而且过于复杂。
另一种选择是自己解析第一个单词(命令),然后使用 argparse 解析剩余的单词(参数)。 但又一次 - 感觉过于复杂。
对于任何语言错误,我深表歉意 - 英语不是我的第一语言。
提前致谢。
编辑:抱歉,我没有说明用户何时以及如何输入命令。用户将打开应用程序并输入命令。 感谢@CharlesDuffy 指出这一点。
编辑 2:子解析器是我的问题的答案。 感谢@GZ0 的链接。
它是如何工作的:
我使用input() 获取用户输入,然后使用shlex 模块(@Amit 提到)将字符串拆分为一个列表。然后将该列表提供给argparse 中的parser.parse_args() 方法。
如果有人对这里的代码感兴趣,the link。
【问题讨论】:
-
第二个选项看起来完全有效并且没有那么复杂。您可以使用
shlex模块解析命令行,使用argparse处理参数。 -
看看
argparse中的子解析器:stackoverflow.com/questions/17073688/… -
“类似于 [操作系统] 命令提示符之类的东西”听起来你不是在要求 argparse,而是要求标准库
cmd模块。 (而如果您确实要解析命令行参数列表,只是那些以子命令名称开头的列表,那么是的,您需要子解析器,正如 GZ0 已经建议的那样)。也就是说,如果没有具体的例子,很难知道你想做什么。 (是否有人启动您的程序,然后然后键入命令及其参数?) -
@GZ0 谢谢!该链接非常有用。我已经设法弄清楚了。如果其他人将来遇到同样的问题,我会更新这个答案。
标签: python parameter-passing command-line-arguments argparse