Die Python-Installation verwendet das interaktive Befehlszeilenmodul pexpect

高洛峰
Freigeben: 2017-03-02 16:52:01
Original
2284 Leute haben es durchsucht

Pexpect ist ein reines Python-Modul, das zur Interaktion mit Befehlszeilenbefehlen wie ssh, ftp, passwd, telnet usw. verwendet werden kann. Es ist besonders einfach unter Linux-Systemen zu verwenden. Schauen wir uns die Befehlszeile genauer an für die Python-Installation. Grundlegendes Tutorial für das interaktive Modul pexpect:

1. Installieren Sie das easy_install-Tool

wget http://peak.telecommunity.com/dist/ez_setup.py
Nach dem Login kopieren
python ez_setup.py installiert das easy_install-Tool (dieses Skript wechselt automatisch zur offiziellen Website zum Suchen, Herunterladen und Installieren)


python ez_setup.py -U setuptools
Nach dem Login kopieren
Aktualisieren Sie das easy_install-Tool

2. Installieren Sie pexpect


easy_install Pexpect
Nach dem Login kopieren
Testen Sie es:


[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
>>>
Nach dem Login kopieren
ok Die Installation ist abgeschlossen.

2. Grundlegende Verwendung

1.run()-Funktion
Die Ausführungsfunktion ist relativ einfach und kann nur einfache Interaktionen erreichen



Code kopieren

Der Code lautet wie folgt:

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


run führt den Befehl aus und gibt das Ergebnis zurück, Ähnlich wie os.system.

Beispiel:




2. Spawn-Klasse
pexpect.run('ls -la')
# 返回值(输出,退出状态)
(command_output, exitstatus) = pexpect.run('ls -l /bin', withexitstatus=1)
Nach dem Login kopieren

Spawn-Funktion ist leistungsfähiger als run und kann komplexere Interaktionen implementiert werden



timeout gibt den Timeout-Wert für das Warten auf die Interaktion an;

maxread legt die Größe des Lesepuffers fest, wenn pexpect versucht, mit der maximalen Anzahl von Bytes zu beginnen, die vom TTY (Teletype-Terminal) gelesen werden.
class spawn 
  __init__(self, command, args=[], timeout=30, maxread=2000, searchwindowsize=None, logfile=None, cwd=None, env=None)
Nach dem Login kopieren

searchwindowsize gibt die Position des Mustervergleichs aus dem Eingabepuffer an Übereinstimmung von Anfang an; der Parameter

logfile gibt den Speicherort des Protokolldatensatzes an.
Arbeitsprozess:



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

pxssh ist eine abgeleitete Klasse von pexpect . Wird zum Herstellen von SSH-Verbindungen verwendet und ist einfacher zu verwenden als pexpect.

login() stellt eine SSH-Verbindung zum Zielcomputer her; logout() gibt die Verbindung frei;
prompt() wartet auf die Eingabeaufforderung, die normalerweise verwendet wird, um auf den Abschluss der Befehlsausführung zu warten.


3. Beispiel

Schreiben Sie ein Skript, um Befehle an den Remote-Server zu senden und die Ergebnisse zurückzugeben.

Skriptinhalt:



Verwendung:

#!/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()
Nach dem Login kopieren

Der Inhalt der host.list-Datei lautet wie folgt:

python scripts.py
Nach dem Login kopieren


Rückgabeergebnis:

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
Nach dem Login kopieren


+++++++++++++++ 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
Nach dem Login kopieren

Weitere Artikel zur Python-Installation und Verwendung des interaktiven Befehlszeilenmoduls pexpect finden Sie auf der chinesischen PHP-Website !


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!