【问题标题】:perl FTP to z/OS, preventing userid from being prepended to destination file nameperl FTP 到 z/OS,防止用户 ID 被附加到目标文件名
【发布时间】:2012-12-11 18:20:34
【问题描述】:

我正在尝试编写一个 perl 脚本(如下)来自动将源文件从 Windows 上传到 z/OS(又名 MVS 或 OS/390)。 put() 方法似乎在 z/OS 上的远程数据集(文件)名称前加上我登录时使用的用户 ID(“JCARTER”)。我要上传到的远程数据集名称是“FSI.V121P01.INSTALL”,它是一个分区数据集 (PDS)。目标数据集名称的前缀为“JCARTER”会导致找不到数据集,并且 put() 失败。我尝试了不同的方法来引用目标文件名,但我的用户 ID 仍然附加在文件名之前。我也尝试使用 cwd() 设置 cwd,使用 quote('SITE', 'QUOTESOVERRIDE') 和 quote('SITE', 'DATASETMODE'),但仍然没有成功。

这是脚本:

use strict;
use Net::FTP;

my $HostIP="xxx.xxx.xxx.xxx";
my $ftp;

$ftp = Net::FTP -> new ($HostIP) or die "Cannot connect to zOS: $@";
$ftp->login("userid","pw") or die "Cannot login.", $ftp->message;
$ftp->ascii();

#$ftp->cwd();
#$ftp->quot('SITE', 'QUO');
#$ftp->quot('SITE', 'DATAS');
print $ftp->message;
$ftp->pwd();
print $ftp->message;
$ftp->put('J:\REL122\RPS100\A2WBLIB\C\a2wversn.c', 'FSI.V121P01.INSTALL(A2WVERSN)');
print $ftp->message;
$ftp->quit;

运行上面的程序会产生以下消息:

表示类型为 Ascii NonPrint “'JCARTER.'”是工作目录。 JCARTER.FSI.V121P01.INSTALL(A2WVERSN) 请求一个不存在的分区数据集 吨。使用 MKD 命令创建它。

当我尝试添加 cwd("") 以删除当前工作目录时,我得到:

表示类型为 Ascii NonPrint “'JCARTER.'”是工作目录。 “/”是 HFS 工作目录。 存储数据集 /FSI.V121P01.INSTALL(A2WVERSN) /FSI.V121P01.INSTALL(A2WVERSN) 打开失败。

看来我已经很接近了。有什么建议么 ?谢谢 - 约翰

【问题讨论】:

    标签: perl ftp zos


    【解决方案1】:

    听起来,当您通过 FTP 连接时,它会将您放入的数据集根据您的用户名命名为“JCARTER”。

    您是否尝试过 cdup () 将您从 JCARTER 命名数据集中解脱出来?然后您可以 cwd() 进入 FSI.V121P01.INSTALL PDS。

    如果这不起作用,您可能只想建立连接,运行 dir() 并查看 Net::FTP 为您返回的内容。这可能会使事情在逻辑上更易于导航。

    【讨论】:

    • 尼克 - 是的,添加 cdup() 有效! cdup() 似乎已删除“JCARTER”。我的 FTP 会话启动时放入的工作目录。使用 cdup() 后看到的 FTP 消息让我相信我也可以使用 cwd("''"),所以我尝试了它,它也奏效了。你为我节省了很多时间。谢谢。
    • z/OS PDS 与目录无关。 z/OS 中有一些语法糖使非 HFS 数据集(如 PDS)看起来像是由目录组成,但这些只是数据集名称限定符。如果您可以用撇号包围您的数据集名称,那也可能会解决您的问题。我相信非 HFS 文件系统早于目录(1960 年代后期)。这个解决方案没有错,只是指出一些问题。继续。
    • @cschneid - 是的,我只是尝试将目标文件名括在双引号内的单引号中,效果也很好。 $ftp->put('J:\REL122\RPS100\A2WBLIB\C\a2wversn.c', "'FSI.V121P01.INSTALL(A2WVERSN)'");我应该早点尝试的。感谢您提供更多信息。
    • 有趣,感谢您的澄清。希望我的编辑使用适当的术语。我之前实际上没有使用过 z/OS PDS - 我只知道有时 Net::FTP 无法将您连接到最直观的位置,而 cdup() 或类似的导航调用可以缓解很多麻烦。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-19
    • 2012-04-20
    • 1970-01-01
    • 2020-04-13
    • 1970-01-01
    • 2014-09-26
    • 1970-01-01
    相关资源
    最近更新 更多