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

高洛峰
Libérer: 2017-03-02 16:52:01
original
2284 Les gens l'ont consulté

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
Copier après la connexion

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
Copier après la connexion

Mettez à niveau l'outil easy_install

2. Installez pexpect

easy_install Pexpect
Copier après la connexion

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
>>>
Copier après la connexion

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)
Copier après la connexion

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)
Copier après la connexion
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)
Copier après la connexion

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()
Copier après la connexion
Utilisation :

python scripts.py
Copier après la connexion
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
Copier après la connexion
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
Copier après la connexion

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 !

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!