最新消息:

编写模块 operations.py 简化 subprocess与paramiko

paramiko admin 3905浏览 0评论

在使用Python来编写运维脚本时,相信大家都使用过subprocess与paramiko这两个模块。
其中,subprocess主要用于本地,而paramiko则是用于远程登录执行以及通过sftp传输文件。

而在使用过fabric这个模块之后,我非常喜欢它通过属性的方式来存储返回状态(failed,succeeded)和输出(stdout,stderr)。
但是通过非命令行方式调用fabric稍微有点麻烦,实现之后,代码看上去也不够简洁。
参考脚本:https://github.com/mcsrainbow/python-demos/blob/master/scripts/xenserver.py

因此,我便参考了fabric源码中的operations.py文件,利用类似的方法将subprocess与paramiko简单的包装了一下,完成了一个新的模块operations.py,实现了local,remote,get,put四个方法,使用起来感觉很贴心。

其中,对于remote,get,put三个方法,推荐用新的函数先包装一下远程服务器的登录参数,来简化后面的重复调用。

脚本链接:https://github.com/mcsrainbow/python-demos/blob/master/scripts/operations.py
相关示例:

>>> from operations import local,remote,get,put

>>> out = local('uname -r')
>>> print out
2.6.32
>>> print out.stdout
2.6.32
>>> print out.failed
False
>>> print out.succeeded
True

>>> out = remote('hostname --fqdn', hostname='heylinux.com', username='jobs', pkey='/path/to/rsa', port=8022)
>>> print out
heylinux.com
>>> print out.failed
False
>>> print out.succeeded
True

>>> out = get('/tmp/remote.txt', '/tmp/local.txt', hostname='heylinux.com', username='jobs', pkey='/path/to/dsa', pkey_type='dsa', port=8022)
>>> print out.failed
True
>>> print out.succeeded
False
>>> print out.stderr
No such file or directory

>>> out = put('/tmp/local.txt', '/tmp/remote.txt', hostname='heylinux.com', username='jobs', password='apple')
>>> print out.failed
False
>>> print out.succeeded
True

转载请注明:爱开源 » 编写模块 operations.py 简化 subprocess与paramiko

您必须 登录 才能发表评论!