<p>我最近也有同样的问题。对我有效的解决方案是:</p>
<ul>
<li><p>按照惯例,使用第一个<em>参数</em>来表示所需的<em>命令</em>
执行(这将是您的<code>start</code>,<code>clear</code>,<code>stop</code>)</p></li>
<li><p>通过<code>sys.argv[1]</code>获得这个命令(我知道这是一个难看的命令
解决方法)</p></li>
<li><p>创建几个<code>optparse.OptionParser()</code>(每个命令一个)</p></li>
<li><p>只调用适当的<code>parse_args()</code>方法<code>OptionParser</code></p></li>
<li><p>如果命令无效或丢失,请创建另一个选项解析器以显示用法</p></li>
</ul>
<p>下面是一个示例代码:</p>
<pre><code># parse.py
import sys
import optparse
def parse_my_command_line():
opt_parser = {}
opt_parser['start'] = optparse.OptionParser()
opt_parser['clear'] = optparse.OptionParser()
opt_parser['stop'] = optparse.OptionParser()
# Start
opt_parser['start'].usage = 'Help for the START command'
opt_parser['start'].add_option(' name', default = None, type = 'str',
help = 'help for name option', metavar = '<name>')
opt_parser['start'].add_option(' type', default = None, type = 'str',
help = 'help for type option', metavar = '<type>')
# Clear
opt_parser['clear'].usage = 'Help for the CLEAR command'
opt_parser['clear'].add_option(' foo', default = None, type = 'str',
help = 'help for foo option', metavar = '<foo>')
# Stop
opt_parser['stop'].usage = 'Help for the STOP command'
opt_parser['stop'].add_option(' name', default = None, type = 'str',
help = 'help for name option', metavar = '<name>')
opt_parser['stop'].add_option(' type', default = None, type = 'str',
help = 'help for type option', metavar = '<type>')
# Get the command from sys.argv
try:
command = sys.argv[1]
except IndexError:
command = None
# Get the appropriate option parser
try:
parser = opt_parser[command]
# Done. Parse arguments and return.
return parser.parse_args()
except KeyError:
# Invalid command. Create a parser to show default usage
parser = optparse.OptionParser()
parser.usage = '%prog [command] [options]\n\n'
parser.usage += 'Description:\n'
parser.usage += ' General help for %prog\n\n'
parser.usage += 'Commands:\n'
for cmd in ['start', 'clear', 'stop']:
parser.usage += ' %s\n' % cmd
parser.usage += ' %s\n\n' % opt_parser[cmd].usage
parser.usage = parser.usage.strip()
if command is None:
parser.error('command cannot be empty')
else:
parser.error('invalid command: %s' % command)
def main():
options, args = parse_my_command_line()
print 'Args = %s' % args
print 'Options = %s' % options
if __name__ == '__main__':
main()
</code></pre>
<p>以下是一些结果:</p>
^{pr2}$