(Python)对字符串输入进行类似argparse的处理

(Python)对字符串输入进行类似argparse的处理,python,Python,我需要通过消息代理接受一个大字符串(我使用的是RabbitMQ),并解析该字符串以了解请求的细节。如果我可以对该字符串进行类似argparse的处理,这将非常有用。有没有办法做到这一点,或者有没有更优雅的方法来实现这一点?我的要求是对字符串进行一些详细的解析,如下所示: <module> <command> <command-specific-info> 也许是这样的: In[2]: from argparse import ArgumentParser

我需要通过消息代理接受一个大字符串(我使用的是RabbitMQ),并解析该字符串以了解请求的细节。如果我可以对该字符串进行类似argparse的处理,这将非常有用。有没有办法做到这一点,或者有没有更优雅的方法来实现这一点?我的要求是对字符串进行一些详细的解析,如下所示:

<module> <command> <command-specific-info>

也许是这样的:

In[2]: from argparse import ArgumentParser
  ...: 
  ...: parser = ArgumentParser()
  ...: parser.add_argument('module')
  ...: parser.add_argument('command')
  ...: parser.add_argument('--keyword')
  ...: parser.add_argument('--date')
  ...: 
  ...: example = 'news headlines keyword=trump, date=mm-dd-yyyy'
  ...: clean = []
  ...: for arg in example.split():
  ...:     if '=' in arg:
  ...:         clean.append('--{}'.format(arg.rstrip(',')))
  ...:     else:
  ...:         clean.append(arg)
  ...: 
  ...: args = parser.parse_args(clean)
In[3]: vars(args)
Out[3]: 
{'command': 'headlines',
 'date': 'mm-dd-yyyy',
 'keyword': 'trump',
 'module': 'news'}

是的,您可以使用。您可以将字符串传递给
解析器。在
argparse
中解析_args
,而不是使用cmd行。或者看看shlex模块。疯狂的莴苣,棒极了!谢谢。这正是我想要的。将在ArgumentParser上花费更多时间。快速提问:1。是否可以自动生成帮助字符串?2.可以为解析器定义一个层次结构而不是一个简单的参数列表吗。请发送给我的链接,你说的-特别是嵌套结构,以及帮助字符串生成。Thanks@DiscoveringJoyOfCodingAgain抱歉耽搁了,我刚才提到的是Python文档:您可以使用
-h
,它将打印自动帮助消息(或者您可以自定义它),我认为子命令就是您所说的嵌套结构。尽管
argparse
可以很好地完成这些事情,但您可能希望作为另一种选择(如果第三方可以的话)进行研究,这要感谢Delirious莴苣。子命令部分回答了我所有的问题,只有一个问题除外(我更喜欢单击它,因为我还不太适应基于decorators的使用)。我还没有想出(从文档中)如何在一个字符串(我可以在消息中发送)中捕获帮助字符串,而不是获取它printed@DiscoveringJoyOfCodingAgain也许这能帮上忙?
In[2]: from argparse import ArgumentParser
  ...: 
  ...: parser = ArgumentParser()
  ...: parser.add_argument('module')
  ...: parser.add_argument('command')
  ...: parser.add_argument('--keyword')
  ...: parser.add_argument('--date')
  ...: 
  ...: example = 'news headlines keyword=trump, date=mm-dd-yyyy'
  ...: clean = []
  ...: for arg in example.split():
  ...:     if '=' in arg:
  ...:         clean.append('--{}'.format(arg.rstrip(',')))
  ...:     else:
  ...:         clean.append(arg)
  ...: 
  ...: args = parser.parse_args(clean)
In[3]: vars(args)
Out[3]: 
{'command': 'headlines',
 'date': 'mm-dd-yyyy',
 'keyword': 'trump',
 'module': 'news'}