对我来说,python是我使用过的最优雅的语言。语法是最低限度的(明显少于大多数标点符号),并有意仿效psuedo代码约定建模,程序员普遍使用这些约定来概述他们的意图。
巨蟒的
if __name__ == '__main__':
套件鼓励重用和测试驱动的开发。
例如,前天晚上,我一起黑了几千个
ssh
作业(同时约100个)并收集所有结果(输出、错误消息、退出值)…记录每一次的时间。它还处理超时(一个
嘘
命令可以无限期地在连接到一个抖动系统时暂停---它的连接超时和重试选项在套接字连接完成后不适用,不管身份验证是否暂停)。这只需要几十行python,而且它确实是最容易创建为类的(在
__main__
在一个简单的包装器中进行命令行解析
圣米尼
. 这足以完成手头的工作(第二天我在25000台主机上运行了脚本,大约两个小时)。现在我可以在其他脚本中轻松地使用此代码:
from sshwrap import SSHJobMan
cmd = '/etc/init.d/foo restart'
targets = queryDB(some_criteria)
job = SSHJobMan(cmd, targets)
job.start()
while not job.done():
completed = job.poll()
# ...
# Deal with incremental disposition of of completed jobs
for each in sorted(job.results):
# ...
# Summarize results
…等等。
所以我的脚本可以用于简单的作业…它可以作为一个模块导入,用于更专业的工作,这在包装器的命令行中是无法描述的。(例如,我可以启动“使用者”子流程,在每台成功执行作业的主机上处理其他工作,同时为报告超时或故障的所有主机发出服务通知单或自动重新启动请求等)。
对于没有独立用法的模块,我可以使用
圣米尼
包含单元测试的套件。因此,每个模块都可以包含自己的测试…实际上,可以使用
doctest
来自标准库的模块。(顺便说一下,这意味着文档注释中的格式正确的示例可以与实现保持同步…因为他们
是
单元测试套件的一部分)。