2016-10-15 35 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和之後是空的,它應該返回目錄列表。pexpect child.before和child.after爲空

回答

0

expect方法以一個圖案或圖案的列表。這些模式被視爲正則表達式。這可能不是很清楚,但是如果你查看pexpect的代碼,那麼你可以看到它是這種情況。

提示變量被給定爲

prompt = ['$', '#'] 

$是正則表達式中一個特殊的字符,這將根據蟒正則表達式的文檔匹配:

「$」匹配的端部字符串或緊接在字符串末尾的換行符之前,並且在MULTILINE模式中也與換行符匹配。

我們可以看到,它是在控制檯輸出相匹配的一個:

>>> child.expect(prompt) 
0 

要解釋$符號作爲文字它必須由一個反斜槓。

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