2012-02-24 3 views
0

안녕하세요 저는 ssh 장치 정보를 읽으려면 pexpect를 파이썬에서 사용하고 있습니다.pexpect의 논리

expObject = pexpect.spawn('/usr/bin/ssh %[email protected]%s' % (username, device)) 
expObject.sendline(password) 

암호를 입력하면 일부 장치 정보가 표시되고 명령 프롬프트에서 계속하려면 아무 키나 누르십시오. 아무 키나 누르면 정보가 사라집니다.

은 내가 비밀 번호를 부여 후 "expObject"을 사용 comtinue 어떤 키를 누르기 전에 표시되는 데이터를 캡처 어떻게 그래서 show version

expObject.expect(CLI_PROMPT) 
    data = expObject.before 

같은 명령을주고 나서 오는 다른 데이터를 캡처하는 논리 아래 사용합니다.

답변

1

http://ubuntuforums.org/showthread.php?t=220139

정확히 당신이 원하는 무엇을위한 훌륭한 가이드입니다. 나는 당신이 실제로 expect를 사용할 필요가없고 단지 ssh 명령 실행과 ssh 키로 원하는 모든 것을 성취 할 수 있다고 생각합니다. 예를 들어 :

2

http://pkeck.myweb.uga.edu/ssh/ 나는 내가이 라인으로 텍스트 출력 라인을 처리 할 필요 비슷한 문제가 있었다 :

여기
hostA:~ jdizzle$ ssh hostB hostname 
hostB 

ssh를 키에 대한 또 다른 튜토리얼입니다. 이것을 작동 시키려면 pexpect가 *. pattern에 줄 바꿈을 포함하도록 regexp를 구성한다는 것을 알고 있어야합니다. 그래서. * 대신 [^ \ n] *을 사용해야합니다. 이런 식으로 뭔가가 현재 상황에서 작동합니다 :

password propt text 
<start of data captured> - 1st line 
a second line 
a third line 
last line <end of data that will be captured> 
press any key to continue 
:

child = pexpect.spawn('ssh command goes here') 
child.expect('password prompt text\r\n') 
child.sendline(password) 
data = "" 
while True: 
    i = child.expect(['press any key to continue', '[^\n]*\r\n']) 
    if i == 0: 
     break 
    data += child.before 
print data 

이 다음 출력하는 명령으로 작동합니다