【问题标题】:Error reason from Perl Net::FTP来自 Perl Net::FTP 的错误原因
【发布时间】: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


【解决方案1】:

来自Net::FTP

$ftp = Net::FTP->new("some.host.name", Debug => 0)
    or die "Cannot connect to some.host.name: $@"

注意$@

$ftp->cwd("/pub")
    or die "Cannot change working directory ", $ftp->message;

注意$ftp->message

【讨论】:

  • 啊!!傻多可。在实际描述部分没有提到 message(),只是在示例代码中。我从 Net::Cmd 看到,它来自那里,但它确实应该说明它继承的 what - 我注意到它似乎没有给你 code() 例如。不过,这不是你的错,你帮了很多忙,所以 +1 并接受。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-19
  • 2013-12-24
  • 1970-01-01
  • 2017-05-22
相关资源
最近更新 更多