我创建一个小的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