最近一直在做的一个东西, 很多地方需要用到 shell 命令,
同样的命令既要在本地运行, 也要放到远程,并获取远程的输出结果
如果每个地方都要判断是在本地还是远程然后再去分别实例不同的对象,
所以写了一个函数, 尽量减少一下重复代码
加入了自己的一些理解
def cmd_method(host, port=22, user=None, pwd=None):
“”"
执行远程或本地命令
r = r"(?i)y|n|[y/d/n]|[y/n]|y/n"
watcher = Responder(pattern=r, response=‘y\n’)
Responder 对象可以通过正则匹配对 stdout 做分析, 如果匹配到了,就向 stdin 写入 response
完成命令的反复交互
:param host: 主机 ip, 本地可以用 ‘localhost’ or ‘127.0.0.1’
:param port: ssh 的端口
:param user: 登陆远程主机的用户
:param pwd: 远程登陆的密码
:return: 正常输出和错误输出: (stdout, stderr)
“”"
from fabric import Connection
from invoke import run, Responder
from paramiko import AuthenticationException
from paramiko.ssh_exception import NoValidConnectionsError, SSHException
def local(command, interactive):
watcher = Responder(
pattern=interactive['pattern'],
response=