系统批量运维管理器pexpect之run函数和pxssh类

一 run函数

run是使用pexpect进行封装的调用外部命令的函数,类似于 os.system或os.popen方法,不同的是,使用run()可以同时获得命令的输出结果及命令的退出状态。

函数定义

pexpect.run(command, timeout=–1,withexitstatus=False,events=None,extra_args=None, logfile=None,cwd=None,env=None)
  • command:是系统已知的任意命令,如没有写绝对路径时,将会尝试搜索命令的路径。
  • events:是一个字典,定义了expect及sendline 方法的对应关系。

spawn方式例子:

from pexpect import * 
child = spawn('scp foo user@example.com:.') 
child.expect('(?!)password') # 表示所在位置右侧的表达式开启忽略大小写模式
child.sendline(mypassword)

使用run函数实现如下,使用更加简洁:

from pexpect import * 
run('scp foo user@example.com:.', events={'(?!)password': mypassword})

二 pxssh类

pxssh是pexpect的派生类,针对在ssh会话操作上再做一层封装,提供与基类更加直接的操作方法。

pxssh类定义

class pexpect.pxssh.pxssh(timeout=30, maxread=2000, searchwindowsize=None, logfile=None, cwd=None, env=None)

pxssh常用的三个方法如下: 

  • login()建立ssh连接。
  • logout()断开连接。
  • prompt()等待系统提示符,用于等待命令执行结束。

三 实战

1 点睛

下面使用pxssh类实现一个ssh连接远程主机并执行命令的示例。

首先使用login()方法与远程主机建立连接,再通过sendline()方法发送执行的命令,prompt()方法等待命令执行结束且出现系统提示符, 最后使用logout()方法断开连接。

2 代码

from pexpect import pxssh
import getpass
try:
    s = pxssh.pxssh()                                         # 创建pxssh对象s
    hostname = raw_input('hostname: ')
    username = raw_input('username: ')
    password = getpass.getpass('password: ')                  # 接收密码输入
    s.login (hostname, username, password)                    # 建立ssh连接
    s.sendline ('uptime')                                     # 运行uptime命令
    s.prompt()                                                # 匹配系统提示符
    print s.before                                            # 打印出现系统提示符前的命令输出
    s.sendline ('ls -l')
    s.prompt()
    print s.before
    s.sendline ('df')
    s.prompt()
    print s.before
    s.logout()
except pxssh.ExceptionPxssh, e:
    print "pxssh failed on login."
    print str(e)

3 结果

[root@localhost pymaintain]# python 5_2_3.py
hostname: 192.168.0.104
username: root
password:
uptime
14:34:35 up  2:18,  5 users,  load average: 0.00, 0.01, 0.05

ls -l
total 81920
drwxr-xr-x.  2 root  root         6 Aug  6  2017 123
-rw-r--r--.  1 root  root   1344512 Nov 11  2017 33.tar
-rw-r--r--   1 root  root     33112 Jan 20  2018 zookeeper.out

df
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sda3       20961280 2959572  18001708  15% /
devtmpfs          494100       0    494100   0% /dev
tmpfs             508428       0    508428   0% /dev/shm
tmpfs             508428    7188    501240   2% /run
tmpfs             508428       0    508428   0% /sys/fs/cgroup
/dev/sda5       10475520 5028196   5447324  48% /usr
/dev/sda2       31441920 7330772  24111148  24% /var
/dev/sda7       37214460   32928  37181532   1% /mydata
/dev/sda1         508588  156276    352312  31% /boot
tmpfs             101688       0    101688   0% /run/user/0

[root@localhost pymaintain]#

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值