【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


ディスカッション
コメント一覧
まだ、コメントがありません