python端末シミュレーションツールpexpect
1922 ワード
Pexpectは純粋なPythonモジュールです.ssh、ftp、passwd、telnetなどのコマンドラインプログラムと自動インタラクティブに使用できます.コマンドラインとのインタラクションの自動化を実現する.
2つの主要なインタフェースrun()関数とspawnクラスを提供した.
run()関数
run機能は比較的簡単で、簡単なインタラクションしか実現できません
runコマンドを実行し、結果をosに返します.System類似
例
spawnクラス
spawnはrunよりも強力で複雑なインタラクションを実現
timeoutインタラクションが待機タイムアウト値であることを指定
maxreadはread bufferサイズを設定する.pexpect毎にTTY(Teletype端末)から読み出す最大バイト数を試みる.
searchwindowsizeは入力バッファからモードマッチングを行う位置を指定し、デフォルトではマッチングを開始する.
logfileパラメータログの記録位置を指定する
さぎょうプロセス
pxsshクラス
pxsshはpexpectの派生クラスであり、ssh接続を確立するために用いられ、pexpectより使いやすい.
login()ターゲットマシンへのssh接続を確立する
logout()接続を解放する
prompt()待機プロンプトは、通常、コマンド実行の終了を待つために使用されます.
作業プロセスはpexpectと同じです
2つの主要なインタフェースrun()関数とspawnクラスを提供した.
run()関数
run機能は比較的簡単で、簡単なインタラクションしか実現できません
run(command,timeout=-1,withexitstatus=False,events=None,extra_args=None, logfile=None, cwd=None, env=None)
runコマンドを実行し、結果をosに返します.System類似
例
pexpect.run('ls -la')
# ( , )
(command_output, exitstatus) = pexpect.run('ls -l /bin', withexitstatus=1)
spawnクラス
spawnはrunよりも強力で複雑なインタラクションを実現
class spawn
__init__(self, command, args=[], timeout=30, maxread=2000, searchwindowsize=None, logfile=None, cwd=None, env=None)
timeoutインタラクションが待機タイムアウト値であることを指定
maxreadはread bufferサイズを設定する.pexpect毎にTTY(Teletype端末)から読み出す最大バイト数を試みる.
searchwindowsizeは入力バッファからモードマッチングを行う位置を指定し、デフォルトではマッチングを開始する.
logfileパラメータログの記録位置を指定する
さぎょうプロセス
#
child = pexpect.spawn('scp foo [email protected]:.')
#
child.expect('Password:')
#
child.sendline(mypassword)
pxsshクラス
pxsshはpexpectの派生クラスであり、ssh接続を確立するために用いられ、pexpectより使いやすい.
login()ターゲットマシンへのssh接続を確立する
logout()接続を解放する
prompt()待機プロンプトは、通常、コマンド実行の終了を待つために使用されます.
作業プロセスはpexpectと同じです
# pxssh
s = pxssh.pxssh()
hostname = raw_input('hostname: ')
username = raw_input('username: ')
password = getpass.getpass('password: ')
# ssh
s.login (hostname, username, password)
#
s.sendline ('uptime') # run a command
#
s.prompt() # match the prompt
#
print s.before # print everything before the propt.
#
s.sendline ('ls -l')
#
s.prompt()
#
print s.before
s.sendline ('df')
s.prompt()
print s.before
# ssh
s.logout()