Python installation uses the command line interactive module pexpect

高洛峰
Release: 2017-03-02 16:52:01
Original
2226 people have browsed it

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
Copy after login

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
Copy after login

Upgrade the easy_install tool

2. Install pexpect

##

easy_install Pexpect
Copy after login

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
>>>
Copy after login

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)
Copy after login

##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)
Copy after login

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)
Copy after login

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()
Copy after login

Usage:

python scripts.py
Copy after login

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
Copy after login

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
Copy after login

For more articles related to Python installation and use of the command line interactive module pexpect, please pay attention to the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
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
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!