2016-10-15 8 views
0
>>> ssh_stuff 
['yes/no', 'Password:', 'password', 'Are you sure you want to continue connecting'] 
>>> prompt 
['$', '#'] 
>>> child = pexpect.spawn('ssh [email protected]') 
>>> child.expect(ssh_stuff) 
1 
>>> child.sendline(getpass.getpass()) 
Password: 
11 
>>> child.expect(prompt) 
0 
>>> child.sendline('ls -l') 
6 
>>> child.expect(prompt) 
0 
>>> print child.before, child.after 

이유는 내 child.before와 after가 비어 있기 때문에 디렉토리 목록을 반환해야합니다.pexpect child.before 및 child.after가 비어 있습니다.

답변

0

expect 메서드는 패턴 또는 패턴 목록을 사용합니다. 이러한 패턴은 정규 표현식으로 처리됩니다. 이것은 설명서에서 분명히 명확하지 않지만, pexpect 코드를 살펴보면 그 경우임을 알 수 있습니다.

가 프롬프트 변수가

prompt = ['$', '#'] 

$로 주어진 것은 파이썬 정규식 문서에 따라 일치 정규 표현식에서 특수 문자입니다 :

'$'을의 끝을 일치 문자열 또는 문자열 끝에있는 줄 바꿈 바로 앞에 있고, 다중 줄 모드에서는 줄 바꿈 앞에 일치합니다.

우리는이 콘솔 출력에 일치되는 하나라고 볼 수 있습니다

>>> child.expect(prompt) 
0 

그것이 앞에 백 슬래시해야 리터럴로 $ 기호를 해석하는가.

prompt = ['\$', '#']