Maison >développement back-end >Tutoriel Python >L'installation de Python utilise le module interactif en ligne de commande pexpect

L'installation de Python utilise le module interactif en ligne de commande pexpect

高洛峰
高洛峰original
2017-03-02 16:52:012346parcourir

Pexpect est un module Python pur qui peut être utilisé pour interagir avec des commandes de ligne de commande telles que ssh, ftp, passwd, telnet, etc. Il est particulièrement facile à utiliser sous les systèmes Linux. Examinons de plus près la ligne de commande. pour l'installation de Python. Tutoriel de base pour le module interactif pexpect :

1. Installation
1. Installez l'outil easy_install

wget http://peak.telecommunity.com/dist/ez_setup.py

python ez_setup.py installe l'outil easy_install (ce script ira automatiquement sur le site officiel pour rechercher, télécharger et installer)


python ez_setup.py -U setuptools

Mettez à niveau l'outil easy_install

2. Installez pexpect

easy_install Pexpect

Testez-le :


[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
>>>

ok L'installation est terminée.


2. Utilisation de baseFonction 1.run()

La fonction run est relativement simple et ne peut réaliser que des interactions simples


Copier le code Le code est le suivant :


run(command,timeout=-1,withexitstatus =False,events= None, extra_args=None, logfile=None, cwd=None, env=None)


run exécute la commande et renvoie le résultat, similaire à os.system
Exemple :

pexpect.run('ls -la')
# 返回值(输出,退出状态)
(command_output, exitstatus) = pexpect.run('ls -l /bin', withexitstatus=1)

2. est plus puissant que run et peut être implémenté Interactions plus complexes

class spawn 
  __init__(self, command, args=[], timeout=30, maxread=2000, searchwindowsize=None, logfile=None, cwd=None, env=None)
timeout spécifie la valeur du délai d'attente pour l'interaction

; maxread définit la taille du tampon de lecture. Chaque fois que pexpect essaie de démarrer à partir du nombre maximum d'octets lus à partir de TTY (terminal Teletype);

searchwindowsize spécifie la position de correspondance de modèle à partir du tampon d'entrée, et la valeur par défaut est de correspond depuis le début ; le paramètre

logfile spécifie l'emplacement de l'enregistrement du journal.

Processus de travail :



# 第一步与终端建立连接
child = pexpect.spawn('scp foo user@example.com:.')
# 第二步等待终端返回特定内容
child.expect('Password:')
# 第三步根据返回内容发送命令进行交互
child.sendline(mypassword)

Classe 3.pxssh

pxssh est une classe dérivée de pexpect . Utilisé pour établir des connexions ssh, plus facile à utiliser que pexpect.
login() établit une connexion ssh à la machine cible ;
logout() libère la connexion ;

prompt() attend l'invite, généralement utilisée pour attendre la fin de l'exécution de la commande.



3. Exemple


Écrivez un script pour envoyer des commandes au serveur distant et renvoyer les résultats. Contenu du script :


#!/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()
Utilisation :

python scripts.py
Le contenu du fichier host.list est le suivant :


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
Résultat renvoyé :


+++++++++++++++ 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

Pour plus d'articles liés à l'installation de Python et à l'utilisation du module interactif en ligne de commande pexpect, veuillez faire attention au site Web PHP chinois !

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn