【expect】会話形式のコマンドを自動実行する。(ライブラリ編)
メタルラックを組み立てたり整理整頓にはまってしまったykarinoです。
今回は前回に引き続いて、Expect的なライブラリを軽く触ってみました。
実際に、Perlモジュールのexpect.pmを使用して、sftpでデータをアップロードするサンプルソースを紹介します。
※事前にExpectモジュールとIO::Sttyモジュールをインストールしてください。
サンプルソース【expect.pl】
#!/usr/bin/perl -w # Expectモジュールを読み込む。 use Expect; # タイムアウト時間指定 $timeout = 5; # ユーザ名指定 $user = '【ユーザ名】'; # パスワード指定 $pass = '【パスワード】'; # ホスト名指定 $host = '【ホスト名】'; # アップロード元のPATH $LocalPath = '【アップロード元のPATH】'; # アップロード先のPATH $RemotePath = '【アップロード先のPATH】'; # コマンド指定 $Command = "sftp $user\@$host"; # コマンド実行時に使用するパラメータ @Parameters = (); # Expectインスタンスを作成して、変数Expectに代入する。 my $Expect = new Expect; # sftpサーバに接続する。 $Expect->spawn($Command, @Parameters); # パスワード入力 $Expect->expect($timeout, "$user\@$host" . "'s password:"); $Expect->send("$pass\n"); # putコマンド実行 $Expect->expect($timeout, "sftp>"); $Expect->send("put $LocalPath $RemotePath\n"); # quitコマンド実行 $Expect->expect($timeout, "sftp>"); $Expect->send("quit\n"); $Expect->interact; $Expect->soft_close();
次に、上記のサンプルソースの実行結果です。
サンプルソース実行結果【expect.pl】
$ ./expect.pl
Connecting to 【ホスト名】...
【ユーザ名】@【ホスト名】's password:
sftp> put 【アップロード元のPATH】 【アップロード先のPATH】
Uploading 【アップロード元のPATH】 to 【アップロード先のPATH】
【アップロード元のPATH】 100% 3612 3.5KB/s 00:00
sftp>quit
ディスカッション
コメント一覧
まだ、コメントがありません