【expect】会話形式のコマンドを自動実行する。(ライブラリ編)

ykarinoexpect,Job,pl,コマンド,自動実行.perl

メタルラックを組み立てたり整理整頓にはまってしまった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

ykarinoexpect,Job,pl,コマンド,自動実行.perl

Posted by ykarino