Heim  >  Artikel  >  Backend-Entwicklung  >  Die Python-Installation verwendet das interaktive Befehlszeilenmodul pexpect

Die Python-Installation verwendet das interaktive Befehlszeilenmodul pexpect

高洛峰
高洛峰Original
2017-03-02 16:52:012227Durchsuche

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
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
Aktualisieren Sie das easy_install-Tool

2. Installieren Sie pexpect


easy_install Pexpect
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
>>>
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)

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)

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)

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

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

python scripts.py


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


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

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


Stellungnahme:
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