Home > Article > Backend Development > Python installation uses the command line interactive module pexpect
Pexpect is a pure Python module that can be used to interact with command line commands such as ssh, ftp, passwd, telnet, etc. It is especially easy to use under Linux systems. Let’s take a closer look at the command line for Python installation. Basic tutorial for the interactive module pexpect:
1. Installation
1. Install the easy_install tool
wget http://peak.telecommunity.com/dist/ez_setup.py
python ez_setup.py Install the easy_install tool (this script will automatically go to the official website to search, download and install)
python ez_setup.py -U setuptools
Upgrade the easy_install tool
2. Install pexpect
##
easy_install PexpectTest it:
[root@OMS python]# python Python 2.7.3rc1 (default, Nov 7 2012, 15:03:45) [GCC 4.1.2 20080704 (Red Hat 4.1.2-48)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import pexpect >>> import pxssh >>>okThe installation has been completed.
2. Basic usage1.run() function
The run function is relatively simple and can only achieve simple interactions
Copy code The code is as follows:
##run(command,timeout=-1,withexitstatus=False,events= None, extra_args=None, logfile=None, cwd=None, env=None)
Example:
pexpect.run('ls -la') # 返回值(输出,退出状态) (command_output, exitstatus) = pexpect.run('ls -l /bin', withexitstatus=1)
##2.spawn class
The spawn function is more powerful than run and can be more complex. Interaction
class spawn __init__(self, command, args=[], timeout=30, maxread=2000, searchwindowsize=None, logfile=None, cwd=None, env=None)timeout specifies the timeout value for waiting for interaction;
maxread sets the read buffer size. Each time pexpect tries to read from the TTY (Teletype terminal )The maximum number of bytes read from;
searchwindowsize specifies the position for pattern matching from the input buffer, and the default is to match from the beginning;
Working process:
# 第一步与终端建立连接 child = pexpect.spawn('scp foo user@example.com:.') # 第二步等待终端返回特定内容 child.expect('Password:') # 第三步根据返回内容发送命令进行交互 child.sendline(mypassword)
3.pxssh class
pxssh is a derived class of pexpect, used for Establishing an ssh connection is easier to use than pexpect.
login() Establishes an ssh connection to the target machine; logout() releases the connection;
Write a script to send commands to the remote server and return the results. Script content:
#!/usr/bin/python #2013-01-16 by larry import pexpect def login(port,user,passwd,ip,command): child=pexpect.spawn('ssh -p%s %s@%s "%s"' %(port,user,ip,command)) o='' try: i=child.expect(['[Pp]assword:','continue connecting (yes/no)?']) if i == 0: child.sendline(passwd) elif i == 1: child.sendline('yes') else: pass except pexpect.EOF: child.close() else: o=child.read() child.expect(pexpect.EOF) child.close() return o hosts=file('hosts.list','r') for line in hosts.readlines(): host=line.strip("\n") if host: ip,port,user,passwd,commands= host.split(":") for command in commands.split(","): print "+++++++++++++++ %s run:%s ++++++++++++" % (ip,command), print login(port,user,passwd,ip,command) hosts.close()Usage:
python scripts.pyThe content of the host.list file is as follows:
192.168.0.21:22999:root:123456:cat /etc/redhat-release,df -Th,whoami 192.168.0.21:22999:root:123456:cat /etc/redhat-release,df -Th,whoamiReturn result:
+++++++++++++++ 192.168.0.21 run:cat /etc/redhat-release ++++++++++++ Red Hat Enterprise Linux Server release 4 +++++++++++++++ 192.168.0.21 run:df -Th ++++++++++++ 文件系统 类型 容量 已用 可用 已用% 挂载点 /dev/cciss/c0d0p6 ext3 5.9G 4.4G 1.2G 80% / /dev/cciss/c0d0p7 ext3 426G 362G 43G 90% /opt /dev/cciss/c0d0p5 ext3 5.9G 540M 5.0G 10% /var /dev/cciss/c0d0p3 ext3 5.9G 4.1G 1.5G 74% /usr /dev/cciss/c0d0p1 ext3 487M 17M 445M 4% /boot tmpfs tmpfs 4.0G 0 4.0G 0% /dev/shm +++++++++++++++ 192.168.0.21 run:whoami ++++++++++++ root
For more articles related to Python installation and use of the command line interactive module pexpect, please pay attention to the PHP Chinese website!