【问题标题】:Manually pass commands into argparse? | Python 2.7手动将命令传递到 argparse? |蟒蛇 2.7
【发布时间】:2017-07-10 03:14:31
【问题描述】:

我正在使用 Python 出色的 Cmd 库制作终端游戏。但我很好奇我是否可以以某种方式将 argparse 代码放入其中。就像使用 argparse 来处理我的 cmd.Cmd() 类中的“args”一样。 为此,我真的希望 argparse 有办法手动将 args 传递给它。我浏览了文档,但没有注意到类似的内容。

【问题讨论】:

  • @dhke 我可以这样传递字符串吗?
  • 查看链接文档。他们自始至终都在使用它。
  • @Cyanite 它需要一个参数序列(列表,元组),如sys.argv 中的参数。 parse_args() 等于 parse_args(sys.argv)。如果你想传递一个类似 shell 的字符串(带引号),你可能想首先使用shlex.split()
  • @dhke 我必须导入shlex吗?

标签: python-2.7 cmd argparse


【解决方案1】:

parse_args() 接受一个可选参数 args 和一个要解析的列表(或元组)。 parse_args()(不带参数)等价于parse_args(sys.argv[1:])

在脚本中,parse_args() 通常会在不带参数的情况下被调用,ArgumentParser 会自动确定来自sys.argv 的命令行参数。

如果您没有元组,而是单个字符串,则可以使用 shlex.split() 完成类似 shell 的参数拆分

>>> shlex.split('"A" B C\\ D')
['A', 'B', 'C D']   

请注意,argparse 将打印使用情况和帮助消息以及exit() 在致命错误上。您可以覆盖.error() 来自己处理错误:

class ArgumentParserNoExit(argparse.ArgumentParser):
    def error(self, message):
        raise ValueError(message) # or whatever you like

【讨论】:

  • 旁注给其他人把这个作为答案:如果你输入一个无效的命令(比如'help'而不是'--help'),argparse会给你一个错误(视觉上)然后引发一个错误。因此,如果您except 错误,用户仍然会看到错误,但脚本不会崩溃。
  • @Cyanite argparse 也将 exit() 处理致命错误。覆盖解析器上的.error() 来解决这个问题。
  • 我不明白关于覆盖.error() 的部分我可以不只是except SystemExit: pass 吗?这是一个游戏 - 我不希望每次玩家在 Cmd() 输入命令时它都会崩溃@
猜你喜欢
  • 1970-01-01
  • 2016-10-17
  • 1970-01-01
  • 2017-08-27
  • 2013-10-19
  • 2020-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多