2011-02-14 83 views
2

首先,我知道optparse從版本2.7開始已被棄用,但我在工作的機器中只有Python 2.3可用。Python的optparse中的有序選項

的問題是如何知道在哪個選項被給予在命令行中,例如順序:

python example.py -f foo -b bar 

將首先執行該選項f,然後將該選項B和

python example.py -b bar -f foo 

會做相反的事情。

我想出了閱讀optargs文件後是用callback動作存儲選項檢測相對於其他選項的位置,因爲options對象似乎並不遵循任何特定順序的唯一解決方案。

你知道這個問題的另一個(也許更好)解決方案嗎?

+2

規則很清楚:這不應該很重要。你爲什麼試圖破壞命令行解析規則?通常有更好的實施方式和更好的符合規則的替代方案。這個問題背後的背景是什麼? – 2011-02-14 16:36:10

+0

您目前的解決方案對我來說似乎很簡單。它有問題嗎? – 2011-02-14 16:42:10

回答

4

違背約定有選擇標誌,根據順序觸發不同的行爲。但是,如果你真的想檢查訂單,你可以看看sys.argv

#assuming both -f and -b are given in cmdline and you need to check for order 
index_f = sys.argv.find("-f") 
index_b = sys.argv.find("-b") 
if index_f < index_b: 
    # do something if -f is before -b