Paramiko模块是非常优秀的ssh连接库
通常使用paramiko
SSHClient类型的exec_command来执行命令,返回一个包含了代表标准输入、标准输出、标准错误的三个元素的元祖
通过操作这三个ChannelFile对象可以获取到命令的标准输出以及命令的退出状态,并且如果命令没有执行完成,获取标注输出或退出状态时,进程将被阻塞,直到命令执行完成,还可以使用标准输入完成简单的交互操作,具体的使用方式,参见Paramiko使用exec_command很方便,但也有不足之处,很多linux环境都是禁止root直接登录的,而使用exec_command无法完成su–root这种交互方式的切换命令,执行时进程将被永久阻塞
invoke_shell方法,用于创建一个子shell进程,这样所有的操作都可以在该子shell中进程,su切换用户操作不受影响,但该方法没有exec_command那种方便的ChannelFile对象,所有的标准输出和标准错误内容通过invoke_shell返回对象的recv方法来获取,每一次调用recv只会从上一次返回的地方开始返回,也没有直接获取命令退出状态的方法,不过这些缺点可以通过代码来实现
importparamikoimporttimedef_shell_exec(shell,cmd,sleep,is_exec=True):ifis_exec:#执行shell命令shell
send(cmd+'\n')time
sleep(sleep)#recv方法返回收集到的shell命令的标准输出和标准错误
#参数为返回多少个自己节数的标准输出和标准错误,值应该大于实际的返回,这样才能保证输出的完整stdout=shell
recv(1024*100)#按行分割得到的信息out_list=stdout
decode()
split('\n')ret