2014-09-26 135 views
0

我正在使用pexpect建立到服務器的ssh連接。沒有bash os(不執行shell命令)。 我想用一個連接執行多個命令。我嘗試了sendline(),但它不會將它作爲它剛剛輸入文本的命令來進行處理。所以也許我需要一種通過pexpect發送「Enter」信號的方式。 下一個用例是執行某些目錄中的命令,所以我首先必須去那裏執行命令。 有沒有辦法做到這一點?或者有沒有更好的方法通過密碼驗證在遠程服務器上執行多個命令?用pexpect執行多個命令

+0

看看[fabric](http://www.fabfile.org/) – jfs 2014-09-26 10:50:48

+0

我找不到python代碼來提供如何使用fabric.they提供密碼,只是說有--password選項。請提供,如果你有任何 – 2014-09-26 10:55:43

+0

如果你搜索「面料密碼」,例如,在谷歌會發生什麼? – jfs 2014-09-26 10:59:11

回答

2

解決此問題的一種方法是首先啓動bash,然後運行您的命令。有一點需要記住的是,在發送每個命令之後調用child.expect是很好的。以下是如何連接到服務器然後運行ls的示例。微不足道,但希望是有幫助的。對於像「CD」命令,你就應該能夠期待和空字符串,因爲沒有通常輸出

import pexpect 
import sys 

child = pexpect.spawn("bash") 
child.logfile = sys.stdout 
child.sendline("ssh [email protected]") 
child.expect("Some string to match") 
child.sendline("ls") 
child.expect("Some directory or file") 
child.sendline("cd /path/to/file/or/directory") 
child.expect("") 
child.sendline("ls") 
child.expect("A certain filename") 

當您運行ssh命令,你也可以這樣做

ssh -t [email protected] 'cd /path/to/directory' 

這會當你的SSH連接開始時,帶你進入一個目錄