【问题标题】:Perl. Fetching file from remote server, only core modules珀尔。从远程服务器获取文件,仅核心模块
【发布时间】:2012-11-27 22:33:22
【问题描述】:

我需要帮助:有没有办法只使用 perl 5.8.8 的核心模块从远程服务器获取文件? File::Fetch 仅从 5.9 开始成为核心模块。

【问题讨论】:

  • Net::FTP 随 perl v5.7.3 发布。
  • 如何在远程服务器上使用没有 ftp-server 的 Net::FTP 获取文件?
  • 也许您应该详细说明“获取”的含义。
  • 远程服务器上有一个文件,可以通过http访问,我需要从这个服务器下载这个文件,只使用perl 5.8.8的核心模块
  • 好吧,看来LWPHTTP::UserAgent 都不是 perl v5.8.8 的核心。我确定有些东西存在,我只是找不到任何东西。 Perl 5.8 到现在已经 10 岁了,所以情况发生了变化。

标签: perl file fetch


【解决方案1】:

这总是出现。看看经典的yes, even you can use CPAN。如果您有能力创建和运行 Perl 脚本,那么您也有能力将模块放在本地目录中并使用它。仅使用核心模块的要求完全是人为的。

在你的情况下,LWP::Simplegetstore() 函数会做你想做的事。虽然它在技术上不是核心,但默认情况下,LWP::Simple 包含在许多 Perl 发行版中。你可能已经拥有它了。

更新:那么,您想在 1000 台服务器上执行此操作吗?无需在每台服务器上手动安装模块。 Use CPAN programmatically 下载并安装您需要的模块(需要进行一些调整才能让 CPAN 将其安装在本地而不是根模块库中)。此外,Leon Timmermans 建议对模块进行 fatpacking 也是另一种选择。

如果你真的不想这样做,那么基本上答案是否定的:没有简单的方法可以通过 HTTP 获取远程文件,既不使用适当的模块,也不使用系统命令 (I不认为编写自己的 HTTP 客户端是一种简单的方法,但如果它适合你,那很好)

我看到的唯一其他潜在解决方案是解决您的问题的不同方法,例如:

  • 在单个位置使用脚本获取文件,然后分发 它通过 FTP 发送到所有 1000 台服务器。
  • 或者,将文件放在 FTP 服务器上,然后使用简单的 Perl 每个服务器上的脚本以通过 FTP 获取它。

【讨论】:

  • 不幸的是,我需要在超过 1000 台服务器上下载这个文件,而且我无法在上面安装一些模块。我需要在 centos 5 上运行的简单的小型 perl 脚本,没有外部系统调用...
  • @user1759997,我已更新我的答案以解决您的异议。
  • 我找到了另一个:使用 IO::Socket::INET 我编写了简单的微型 http 客户端。 ;-) (IO::Socket 是 5.3 以来的核心模块
【解决方案2】:

正如 Dan 所说,是的,即使您也可以使用 CPAN。他的链接没有提到的一种方法是将其编写为使用普通 CPAN 的发行版,然后将其编写为fatpack。 Fatpacker 将脚本与其所有(纯 perl)依赖项结合起来,创建一个易于分发的文件。

【讨论】:

    【解决方案3】:

    你可以使用:

    my $wgetoutput = `wget "$myFileToGet"`;
    

    反引号 (`) 中的内容将提供给默认 shell,因此您可以在那里调用任何您想要(并且被允许)的内容。 警告:$myFileToGet 中可能包含“&& rm -rf *”之类的内容,所以不要忘记清理!

    【讨论】:

    • 谢谢,我知道这一点,但不能按条件使用 wget =) 你知道另一种严格从 perl 下载文件的方法吗? (5.8.8)
    • 没有线索,抱歉。我以前从未使用过这样的限制环境,我用过的最小的系统是 GNUblin。 ://
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 2015-10-31
    • 1970-01-01
    • 1970-01-01
    • 2012-07-20
    • 1970-01-01
    相关资源
    最近更新 更多