【发布时间】:2012-01-27 05:38:59
【问题描述】:
我正在使用 Net::FTP 将文件传输到大型机,我正在测试失败条件。
我的代码基本上是这样的:
my $ftp = Net::FTP->new ("mainframe.com", Timeout => 20);
if (! $ftp) {
logMessage ("Could not connect to host: $!");
return;
}
if (! $ftp->login ("paxdiablo", "demigodemporeroftheuniverse")) {
logMessage ("Could not log in to host: $!");
$ftp->quit ();
return;
}
if (! $ftp->put ("myfile.txt", "'CANT.WRITE.TO.THIS'")) {
logMessage ("Could not put file: $!");
$ftp->quit ();
return;
}
我知道我无法创建数据集CANT.WRITE.TO.THIS,因为我没有所需的权限,但是当我尝试时,我看到的唯一消息是:
Could not put file:
$! 中没有说明问题所在。我查看了Net::FTP doco,它说的是:
put ( LOCAL_FILE [, REMOTE_FILE ] )Put a file on the remote server. LOCAL_FILE may be a name or a filehandle. If LOCAL_FILE is a filehandle then REMOTE_FILE must be specified. If REMOTE_FILE is not specified then the file will be stored in the current directory with the same leafname as LOCAL_FILE.Returns REMOTE_FILE or the generated remote filename if REMOTE_FILE is not given.
我也找不到任何关于检索特定错误的信息(如$ftp->getLastError() 或类似的东西)。
如何向用户说明为什么传输失败?
在较早的迭代中,我求助于放置文件,然后再次获取它并在本地检查内容。我真的宁愿不不得不再次将这种笨拙的代码强加给人们。
【问题讨论】:
-
您可以通过 FTP 服务器提交一个小作业来尝试创建数据集 CANT.WRITE.TO.THIS。然后解析 JESLOG 中的 RACF 或 ACF2 消息,指示更具体的错误。
标签: perl error-handling ftp mainframe