Pexpect學習筆記2

2021-06-23 08:52:23 字數 3388 閱讀 1016

下面我們講下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',[

'[email protected]'

])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()函式

import

pxssh

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

:print

("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 截斷正態...