您好,登錄后才能下訂單哦!
1、介紹pexpect
通過pexpect我們可以實現(xiàn)對ssh,ftp,passwd,telnet等命令進(jìn)行自動交互,不需要人工干預(yù)達(dá)到自動目的。
2、pexpect的組件介紹
2.1、spawn類
作用:啟動和控制子應(yīng)用程序,其構(gòu)造函數(shù)如下:
class pexpect.spawn(command,args=[],timeout=30,maxread=2000,searchwindowsize=None,logfile=None,cwd=None,env=None,ignore_sighup=True)
其中command是任意已知的系統(tǒng)命令,timeout是等待結(jié)果的超時時間,maxread是從終端一次讀取的最大字節(jié)數(shù),searchwindowsize是匹配緩沖區(qū)字符串的位置。
注意點:pexpect不會解析shell命令中的元字符(重定向>,管道|,通配符*),不過將存在這三個特殊元字符的命令作為/bin/bash的參數(shù)進(jìn)行調(diào)用,可以解決這個問題。比如:
child=pexpect.spawn('/bin/bash -c "ls -l | grep LOG > logs.txt"')
child.expect(pexpect.EOF)
將命令的參數(shù)以Python列表形式替換:
shell_cmd = 'ls -l | grep LOG >logs.txt'
child=pexpect.spawn('/bin/bash',['-c',shell_cmd])
child.expect(pexpect.EOF)
調(diào)試代碼是,pexpect提供兩種方式可以查看輸入輸出:1>寫入到日志 2>輸出到stdout
child=pexpect.spawn('some_cmd')
fout=file('mylog.txt','w')
child.logfile = fout
或者:child.logfile=sys.stdout
其中expect方法定義了一個子程序輸出的匹配規(guī)則:
定義的方法是expect(pattern,timeout=-1,searchwindowsize=-1)
pattern表示字符串、pexpect.EOF(指向緩沖區(qū)尾部)、pexpect.TIMEOUT、正則表達(dá)式。
send向子程序發(fā)送相應(yīng)命令,相當(dāng)于標(biāo)準(zhǔn)輸入鍵盤
send(self,s)發(fā)送命令,不回車
sendline(self,s='')發(fā)送命令,回車
sendcontrol(self,char)發(fā)送控制字符,如child.sendcontrol('c')相當(dāng)于ctrl+c
sendeof()發(fā)送eof
2.2>run函數(shù)
run是使用pexpect進(jìn)行封裝的外部命令的函數(shù)
run(command,timeout=-1,withexitstatus=False,events=None,extra_args=None,logfile=None,cwd=None,env=None)
import pexpect
pexpect.run('scp filename user@ip:~',events={'(?)password':mypassword})
3、pxssh
pxssh針對ssh會話操作做了一層封裝,提供了更加直接的操作方式
pxssh常用方法:login()建立ssh鏈接,logout()斷開連接,prompt()等待系統(tǒng)提示符,用戶等待命令執(zhí)行完畢。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。