免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4776 | 回复: 4
打印 上一主题 下一主题

paramiko交互的困惑 [复制链接]

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-06-23 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-05-06 19:54 |只看该作者 |倒序浏览
请教一个思路问题:
paramiko.SSHClient.invoke_shell可以提供一个交互的shell
但是只能在一个函数中完成交互与上下文的关系,没办法通过调用函数完成多次命令执行,因为每次调用函数后invoke_shell就被初始化话了,除非先把要执行命令写入函数体内,外部调用的话invoke_shell就被初始化话了

其实就是解决以后对象初始化一次后,每次调用方法但是别再初始化的思路

论坛徽章:
4
程序设计版块每日发帖之星
日期:2015-10-14 06:20:00每日论坛发贴之星
日期:2015-10-14 06:20:00程序设计版块每日发帖之星
日期:2016-05-02 06:20:00程序设计版块每日发帖之星
日期:2016-05-08 06:20:00
2 [报告]
发表于 2016-05-06 20:58 |只看该作者
paramiko没用过,看官方文档吧,或者英文Google

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-06-23 06:20:00
3 [报告]
发表于 2016-05-09 11:23 |只看该作者
回复 2# mswsg

channel = ssh.invoke_shell()
channel.send('cd /home\n')
channel.send('ls\n')
ls命令执行基础是在/home目录下
比如上面三个命令,ssh.invoke_shell()初始化一个shell然后在这个基础上上下文,但现实情况是执行命令不固定,就打算以函数方式实现,但这样来的话每次执行一次命令就会导致 ssh.invoke_shell()被初始化一次,上下文环境就没有了:
def cmd(cmd):
      channel.send(cmd+'\n')



   

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-06-23 06:20:00
4 [报告]
发表于 2016-05-09 11:28 |只看该作者
比如这个例子:
def doForeach(vms, commands, printStdout=True):
    sshClient, sshConf = getSSHClientAndConf()
    for id,vm in vms.items():
        sshClient.connect(vm["ip"], **sshConf)
        chan = sshClient.invoke_shell('vt100',80,300)
        for command in commands:
            chan.send(command + "\n")
            if printStdout: print getChannelOut(chan)
        chan.close()
        sshClient.close()
每次都必须把命令固定下来,执行,如果执行命令不固定就没办法操作了

论坛徽章:
0
5 [报告]
发表于 2016-05-17 17:01 |只看该作者
用reload行不?我印象中好像这个可以把之前的再导一次
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP