2011-08-18 79 views
3

我正在編寫一個基於命令行插件的程序,其中插件將提供任何我提供的額外功能。Python和任意命令行選項

因此,例如,假設我編寫了一個簡單的腳本來解析圖像並存儲它們,這就是我所做的。然後,其他人可以編寫一組腳本來操縱圖像,並將其腳本放入插件中。

該插件將被加載,用戶可以通過在命令行中指定其名稱來訪問該插件。

腳本想要爲用戶提供其他選項的情況並不少見。所以假設在某些年份,已經寫了20個不同的插件。

現在,所有作者都希望允許用戶提供選項,因此主引擎應該接受用戶的選項並將它們傳遞給插件,以便它能夠處理它們,無論它是否需要。

爲了保持統一,他們可能會同意某些選項應執行類似的操作。像「-o名稱」應該將輸出名稱設置爲「名稱」。然後他們會執行他們自己的選項和主要引擎不知道的東西(當然,它不應該知道插件做什麼)

我使用不推薦的getopt模塊,它會拋出每當我指定一個未定義的選項時都會有異我聽說過optparse和argparse,但我不確定這些是否允許用戶在沒有代碼拋出異常的情況下指定他想要的任何選項。

我該怎麼做才能指定任何命令行選項?

回答

6

​​允許您使用parse_known_args方法部分解析參數列表,並返回正確解析的內容以及剩餘參數的列表。

+0

我只是擡起頭來argparse的文檔,發現,它甚至說:「有時,一個腳本只能分析少數的命令行參數,傳遞其餘的參數上的腳本或程序。」大聲笑 – MxyL

1

您想要的解決方案可能是將命令行參數視爲一種進程管道。哪些選項也是選項的一部分。

command <global options> sub_command <sub_options> new_sub_command <new_sub_options> 

每個命令將轉向選項關閉的sys.argv,直到它找到一個不理解,或者一個可以不是一個有效的選項,然後停止解析參數,它的工作,並將控制權返回給插件-調度。