Home  >  Article  >  Backend Development  >  Python installation uses the command line interactive module pexpect

Python installation uses the command line interactive module pexpect

高洛峰
高洛峰Original
2017-03-02 16:52:012286browse

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 Pexpect

Test 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)


run runs the command and returns the result, similar to os.system.

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;

The logfile parameter specifies the recording location of the log.

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;

prompt() waits for the prompt, usually used to wait for the completion of command execution.



3. Example


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.py

The 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,whoami

Return 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!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn