-1

我的python脚本是这样的:

def main(argv):
    print argv
    try:
        opts, args = getopt.getopt(argv,"h",["help"])
        print opts
        print args
        for opt, arg in opts:
           print opt

但是当我运行它时,我看到 opts 是空的。

 ./myscript.py debug.lst -s 0 -e 1
['debug.lst', '-s', '0', '-e', '1']
[]
['debug.lst', '-s', '0', '-e', '1']

你知道如何让它工作吗?

4

2 回答 2

1

正如文档清楚地说:

注意 与 GNU 不同getopt(),在非选项参数之后,所有进一步的参数也被视为非选项。这类似于非 GNU Unix 系统的工作方式。

所以,这正是你应该期待的。

如果您想要 GNU 风格的解析而不是传统的 Unix 风格的解析,请使用gnu_getopt.

或者,更好的是,使用argparse而不是getopt. 使用的唯一充分理由getopt是 (a) 您getopt对自己的手背了如指掌,不想学习任何新东西,或者 (b) 您正在移植或维护代码(可能来自 C 或其他语言)getopt. 这些都不适用于这里。文档在文档的最顶部明确说明了这一点getopt


另外,请注意,一旦您以一种或另一种方式解决了此问题,您只会收到有关 unrecognized option 的错误-s

于 2013-07-31T17:34:16.577 回答
0

对于 gnu_getopt,如果您包含您期望的选项,则以下内容有效:

>>> getopt.gnu_getopt(['myscript.py', 'debug.lst', '-s', '0', '-e', '1'],'hs:e:')
([('-s', '0'), ('-e', '1')], ['myscript.py', 'debug.lst'])
于 2013-07-31T18:00:58.200 回答