>  기사  >  백엔드 개발  >  Python 설치에서는 명령줄 대화형 모듈 pexpect를 사용합니다.

Python 설치에서는 명령줄 대화형 모듈 pexpect를 사용합니다.

高洛峰
高洛峰원래의
2017-03-02 16:52:012289검색

Pexpect는 ssh, ftp, passwd, telnet 등과 같은 명령줄 명령과 상호 작용하는 데 사용할 수 있는 순수 Python 모듈입니다. 특히 Linux 시스템에서 사용하기 쉽습니다. 명령줄을 자세히 살펴보겠습니다. Python 설치용 기본 튜토리얼:

1. 설치
1. easy_install 도구 설치

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

python ez_setup.py는 easy_install 도구를 설치합니다(이 스크립트는 자동으로 공식 웹사이트로 이동하여 검색, 다운로드 및 설치합니다)


python ez_setup.py -U setuptools

easy_install 도구 업그레이드

2. pexpect 설치


easy_install Pexpect

테스트해 보세요.


아아아아

ok 설치가 완료되었습니다.

2. 기본 사용법
1.run() 함수
run 함수는 상대적으로 간단하며 간단한 상호작용만 가능합니다


코드 복사

코드는 다음과 같습니다.


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


run은 명령을 실행하고 결과를 반환합니다. os.system과 유사합니다.

예:


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

2.spawn 클래스

spawn 함수는 다음과 같습니다. 실행보다 더 강력하고 더 복잡하게 구현될 수 있습니다. 상호 작용

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

timeout은 상호 작용을 기다리는 시간 초과 값을 지정합니다.

maxread는 읽기를 설정합니다. pexpect가 TTY(Teletype 터미널)에서 읽으려고 할 때마다


searchwindowsize에서 읽은 최대 바이트 수는 입력 버퍼에서 패턴 일치 위치를 지정하며 기본값은 처음부터 일치하는 것입니다. ;

logfile 매개변수는 로그 기록 위치를 지정합니다.

작업 프로세스:



class spawn 
  __init__(self, command, args=[], timeout=30, maxread=2000, searchwindowsize=None, logfile=None, cwd=None, env=None)

3.pxssh 클래스

pxssh는 pexpect의 파생 클래스입니다. SSH 연결을 설정하는 것이 예상보다 사용하기 쉽습니다.
login()은 대상 시스템에 대한 SSH 연결을 설정합니다.

logout()은 연결을 해제합니다.

prompt()는 일반적으로 명령 실행이 완료될 때까지 기다리는 데 사용됩니다.

3. 예시
원격 서버에 명령을 보내고 결과를 반환하는 스크립트를 작성하세요.
스크립트 내용:


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

사용법:

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

Host.list 파일의 내용은 다음과 같습니다.


python scripts.py

반환 결과:


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


Python 설치 및 명령줄 대화형 모듈 pexpect 사용과 관련된 더 많은 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.