2014-02-08 47 views
0

我想使用pexpect從服務器的scp文件,但它似乎什麼都不做(甚至沒有錯誤信息)。這裏是我的代碼:pexpect:期望各種行

import pexpect 
child=pexpect.spawn('scp -r [email protected]:route/file .') 
child.expect("[email protected]'s password:") 
child.sendline('password') 

我認爲,問題出在child.expect命令,因爲「用戶@主機的密碼:」是的大約30行歡迎信息,其中包括特殊caracters的最後一行。有沒有什麼辦法可以讓觀察者期待不止一條線或任何東西?或者等待X秒,然後輸入密碼?

編輯:它與child.wait()命令,但它停在第9個文件。它發生的第十個非常大(約250Mb),我不知道它是否與它有關...謝謝!

編輯:我把線

child.logfile=sys.stdout 

child=pexpect.spawn('scp -r [email protected]:route/file .') 

和我所得到的在屏幕上,而不是在一個文件,是通過「用戶@主機的密碼完成的歡迎信息:「,然後我在同一行看到了密碼,但我仍然沒有得到這些文件。

任何人都知道如何解決它?

謝謝大家!

+0

'expect'將繼續掃描,直到它看到您給它的字符串,所以您提供的代碼應該可以工作。試着設置'child.logfile = sys.stdout'來看看發生了什麼。 –

+0

嘗試在最後添加'child.wait()',以等待孩子完成。 – jfs

回答

0

你可以看一下Pexpect的的屬性緩衝區: - 目前在緩衝 pexpect.buffer#字符串 - - 解析後就匹配pexpect.after#字符串解析之前在pexpect.expect 指定的正則表達式匹配pexpect.before#字符串正則表達式在pexpect.expect中指定

請記住,child.expect()是一個阻塞調用,直到它匹配正則表達式或它遇到EOF/TIMEOUT異常時纔會返回。