2013-07-31 62 views
-1

我的Python腳本是這樣的:如何獲得在python getopt.getopt

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'] 

你有什麼想法如何讓這個工作?

+1

這不能成爲你的實際代碼。請向我們展示實際運行併產生錯誤的代碼,而不是模糊不清的類似代碼。 – abarnert

+0

請參閱[文檔](http://docs.python.org/2/library/getopt.html#getopt.getopt)。你的代碼根本不匹配getopt接口。 – user2357112

+0

@ user2357112:他的代碼完美匹配getopt接口:它是一個參數列表,一個短選項字符串和一個長選項列表。這就是爲什麼它正在做正確的事情。 – abarnert

回答

1

由於the docs說清楚:

註釋與GNU getopt(),一個非選項參數後,所有參數進一步也被視爲非選項。這與非GNU Unix系統的工作方式類似。

所以,這正是你應該期待的。

如果您想要GNU風格的解析而不是傳統的Unix風格的解析,請使用gnu_getopt

或者,更好的是,使用​​而不是getopt。使用getopt的唯一好理由是(a)你知道getopt就像手背,不想學習任何新東西,或者(b)你正在移植或維護代碼(可能來自C語言或其他語言)使用getopt。這些都不適用於此。文檔明確地說明了這一點,就在getopt文檔的最頂端。


另外,請注意,一旦你解決這個問題,這樣或那樣的,你只是要得到有關無法識別的選項-s錯誤。

0

對於gnu_getopt,下面的作品,如果你有你所期望的選擇:

>>> getopt.gnu_getopt(['myscript.py', 'debug.lst', '-s', '0', '-e', '1'],'hs:e:') 
([('-s', '0'), ('-e', '1')], ['myscript.py', 'debug.lst'])