外部包依赖docopt和paramiko
有一个server信息文件,内容格式为 : “主机名-IP:端口”。脚本读取此文件来决定要对哪些server进行操作(该文件内部支持#注释掉某些server)
采用了docopt提供命令行界面
paramiko模块实现远程命令和sftp客户端功能。这里paramiko的sftp实例其只包含了基本的单个文件传输功能;并且不保存文件相关时间信息。
paramiko 通过sftp实例传输文件环节,这里额外实现“保持文件时间信息”和“实现目录传输”以及“实现类似rsync的传输机制”是要考虑很多问题和逻辑的。传输机制模仿rsync的默认机制,检查文件的mtime和size,有差异才会真正传输。
实现了参数中原路径和目标路径的自动判断,例如传输目录时不要求路径后面加‘/’
对于远程命令(cmd),可以通过设置(--skip-err)跳过某些server的错误继续执行。例如批量执行‘ls’命令,一般情况会因为某些server上不存在而报错退出全面的错误信息提示。对于执行中的几乎所有可能出现的错误,都有捕获机制获取并输出
下面先来看一些基本的使用截图吧
帮助信息:
批量执行远程命令:
上传:
下载:
其实批量执行命令,传输文件在Linux上用shell也是可以很好的实现(而且ssh或rsync等也肯定比这套脚本功能点更多),但是考虑到并发执行以及在linux和win平台的通用性,用Python来实现就有必要了。尤其是想在Win客户端和Linux服务器之间模仿rsync机制传输文件时,这个脚本就能派上用场了。
另外脚本里包含了两个有用的函数(类):
print_color()函数方便的在Linux下实现打印不同颜色的字体;
OutputText类在多线程任务需要在中终端打印结果时会非常有用