下面我們講下pexpect的重要函式都有哪些。
首先pexpect有兩個主要執行命令的介面run()和spawn(),run()功能比較簡單,如果只是執行簡單的命令,並讀取結果,可以使用run函式
pexpect.run('ls -al')
而spawn類功能強大,支援與遠端計算機的互動。
一、spawn(
command, args=,[
]timeout=30,maxread=2000,searchwindowsize=none, logfile=none, cwd=none, env=none,ignore_sighup=true, echo=true
)其中命令和命令引數有以下兩種方式,都是可以的。
1.
child=pexpect
.spawn
('/usr/bin/ftp'
)child
=pexpect
.spawn
('/usr/bin/ssh [email protected]'
)child
=pexpect
.spawn
('ls -latr /tmp'
)
2.
child=pexpect
.spawn
('/usr/bin/ftp',)
child
=pexpect
.spawn
('/usr/bin/ssh',[
])child
=pexpect
.spawn
('ls',[
'-latr'
,'/tmp'
])而且spawn不支援重定向、管道、萬用字元(>
, |, or *
)等符號. 如果你需要使用這些符號,需要呼叫shell命令。
child
=pexpect
.spawn
('/bin/bash -c "ls -l | grep log > logs.txt"'
)child
.expect
(pexpect
.eof
)
二、expect( pattern,
timeout=-1,
searchwindowsize=-1
)
expect()前面已經學過了,這裡主要指出一點,以下兩種形式是完全等價的。
1.index=p
.expect
(['good'
,'bad'
,pexpect
.eof
,pexpect
.timeout
])if
index==0
:do_something
()elif
index==1
:do_something_else
()elif
index==2
:do_some_other_thing
()elif
index==3
:do_something_completely_different
()2.
try:
index=p
.expect
(['good'
,'bad'
])if
index==0
:do_something
()elif
index==1
:do_something_else
()except
eof:
do_some_other_thing
()except
timeout
:do_something_completely_different
()三、send(), sendline(), sendcontrol()
用來傳送字元和字串給遠端子程式。
四、read(), readline()用來讀取子程式返回的資料
五、interact() 把與子程式的互動控制交給使用者,使使用者可以直接控制子程式,使用esc退出
控制子程式常用函式
isalive() 檢視子程式是否活著
wait()阻塞等待子程式退出
close()關閉與子程式的連線
pid() 子程式的程序id
講完spawn類之後,我們扒一扒pexpect對ssh的擴充套件類pxssh。pxssh主要擴充套件了以下三個函式,login(), logout(), prompt().prompt()相當於expect()函式
importpxssh
import
getpass
try:s=
pxssh
.pxssh
()hostname
=raw_input
('hostname: '
)username
=raw_input
('username: '
)password
=getpass
.getpass
('password: ')s
.login
(hostname
,username
,password)s
.sendline
('uptime'
)# run a commands.
prompt
()# match the prompt
print(s
.before
)# print everything before the prompt.s.
sendline
('ls -l')s
.prompt
()print(s
.before)s
.sendline
('df')s
.prompt
()print(s
.before)s
.logout
()except
pxssh
.exceptionpxsshase
("pxssh failed on login."
)print(e
)
pexpect常用的應該就是這些了,而且這些功能應該已經能夠支援完成大多數任務了。樓主也是剛剛開始使用,總體感覺pexpect算簡單易懂了,但是還是有一些疑問沒有解決,尤其是子程式執行時間比較長的時候,總感覺程式不在我的掌控之內,還得繼續努力學習,同時也希望高手能不吝賜教。
pexpect庫學習之包裝類詳解
在 pexpect 庫中,包裝類的構造引數使用的命令或者要包裝命令的提示符,還可以通過這個包裝類來修改命令的提示符,那麼所謂的包裝類實際就是用於給使用者互動相應的子命令,它的例項方法主要是 run command command,timeout 1 通過包裝物件來執行那些命令,對於這個包裝類在 pe...
學習筆記2
異常 try catch exception e finally 如果出現異常的 沒有try catch語句,異常會浮現至它所出現的方法上,然後從該方法拋至其呼叫者。異常分為檢查異常和非檢查異常,常見的錯誤例如1 0等為非檢查異常,大部分都是檢查異常。過載,重寫 過載就是同乙個類中方法名相同,但是方...
學習筆記2
import tensorflow as tf 常量tf.constant value,dtype,shape,name 變數tf.variable self,dtype 隨機數生成函式 正態分佈隨機數 tf.random normal 2,3 stddev 2,mean 0,seed 1 截斷正態...