我創建一個小的Python腳本來管理不同類型的服務器(FTP,HTTP,SSH等)的Python ArgParse Subparsers並鏈接到正確的函數
在每個類型的服務器,我們可以執行不同類型的動作(部署,配置,檢查等)
我有一個基Server
類,然後爲每個類型的服務器的一個單獨的類從該繼承:
class Server:
...
def check():
...
class HTTPServer(Server):
def check():
super(HTTPServer, self).check()
...
class FTPServer(Server):
def check():
super(FTPServer, self).check()
...
的樣本命令行可能成爲:
my_program deploy http
在命令行中,兩個強制性參數,我們需要的是:
- 要執行的操作
- 類型服務器創建的/管理
以前,我是用和store
操作,並使用dict
將命令行選項與實際的類和函數名稱進行匹配。例如:
types_of_servers = {
'http': 'HTTPServer',
'ftp': 'FTPServer',
...
}
valid_operations = {
'check': 'check',
'build': 'build',
'deploy': 'deploy',
'configure': 'configure',
'verify': 'verify',
}
(在我的實際代碼,valid_operations是不是很幼稚的1:1映射。)
,然後使用相當可怕的代碼來創建正確類型的對象,並調用正確的課程。
然後我想我會使用argparse的subparsers
功能來代替它。所以我做了每個操作(檢查,構建,部署等)一個subparser。
通常,我可以將每個子命令鏈接到一個特定的函數,並讓它調用它。但是,我不想僅僅調用通用的check()
函數 - 我需要創建正確類型的對象第一個,然後調用該對象內的相應函數。
有沒有好的或pythonic的方式來做到這一點?最好是一個不涉及大量硬編碼,或者設計得很糟的if/else循環?
你試過[面料](http://fabfile.org/ ) - 簡化使用SSH進行應用程序部署或系統管理任務的命令行工具? – jfs 2011-09-01 16:52:36