私は対話型コマンドラインツールをWebアプリケーションに変換しています。このツールはバックエンドとして使用しています。 私は(AJAXを使って)ユーザーコマンドを受け取り、コマンドを抽出するperl CGIスクリプトを呼び出します。 次に、コマンドをプロセスに送信し、出力を収集し、結果のhtmlページに渡すためにexpectを使用します。Perl FreezeThawで期待する
ユーザーが入力する最初のコマンドは正常に実行されます。 次のコマンドは実行されません。
FreezeThawを使用して、最初のリクエストの後にexpectオブジェクトをフリーズし、その後、次のリクエストで解凍します。それはうまく止めますが、解凍はしません。
は、ここに私のコードです:
use strict;
use warnings;
use CGI;
use Expect;
use FreezeThaw qw(freeze thaw);
if (-e "logFile") {
##Log file exists, just run the command after retrieving the object
##Retrieve object here
my ($expectObject) = thaw($params{'object'});
if ($command eq 'exit') {
#exit
}
}
else {
print "log NOT exists!!";
##Log file doesn't exist, spawn a new process and loop
my $expectObject = Expect->spawn("command") || die "\nCannot spawn: $!\n";
$expectObject->expect(15, "prompt>");
$expectObject->send("$command\r");
$expectObject->expect(15, "stile>");
$output = $expectObject->before();
print "<br>$output<br>";
##Persist object here in file
my $serialized = freeze($expectObject);
##Write serialized object to file
die "Serialization Error (write):\n$!" if (!addParameter("$workingDir/$folderName", "object", $serialized));
}
任意のアイデアを、なぜそれが失敗していますか..?
私のCGIスクリプトが終了した場合は、誰でもplsに教えてください。はいの場合、どのように生成されたプロセスを複数のリクエストにわたって持続させることができますか? – krish7919