我们可以得到通过perl的LFTP文件传输响应

问题描述 投票:2回答:1

我在LFTP新尝试使用自动化LFTP通过Perl代码我的文件传输。我能够设置代理服务器,并连接到远程主机,也可以使用Perl代码文件成功传输到远程主机。但我不能够得到lftp的转移响应可以让我的Perl的工作知道传送成功完成,由于这是我的perl的工作失败考虑到有一些问题与传输。我曾尝试详细选项,以及,但它同时使用lftp的传输文件也没有显示任何回应。

open(FTP,"lftp -vvv <command_file |")

command_file具有低于行代码:

set ftp:proxy http://proxy_server:port
open ftp://remote_server_name
user user_name password
cd /remote_server_dir
put /local_server_file_name -o remote_server_file_name

现在,调用此代码“FTP”后,文件被成功地转移到远程主机上,但以验证它是成功的,我用下面的代码:

while(<FTP>)
{
   print $_;
   if ((/transferred/))
   {
      # successful
   }
   else
   {
      # not successful
   }
}

LFTP而手动执行给出响应等300 bytes transferred。因此,我想使用关键字transferred为成功转移的标志。但似乎,同时通过perl的运行此LFTP我没有得到任何回应的。

请让我知道如何从远程服务器通过自动化的工作文件的成功转移后的反应。谢谢!

perl ftp file-transfer lftp
1个回答
0
投票

三个问题:

  1. <command_file不起作用,-f command_file呢,
  2. 一些消息去STDERR,所以我们需要一个重定向捕捉一切,
  3. 由@lav您需要手动启用交互模式如果stdout不是一个TTY指出

更新complete code example

#!/usr/bin/perl
use strict;
use warnings;

my $successful;

# redirect STDERR to STDOUT: some messages go to STDERR!
if (open(my $ftp_fh, "lftp -vvv -f dummy.txt 2>&1 |")) {
    while(<$ftp_fh>) {
        print;
        $successful++ if / transferred$/;
    }

    close($ftp_fh)
        or die "lftp command failed: $!\n";

} else {
    die "lftp execution failed\n";
}

print "File transfer ", ($successful ? "" : "not "), "successful!\n";

exit 0;

这是我的命令文件:

set interactive yes
set xfer:clobber yes
open ftp://ftp.funet.fi
user Anonynmous [email protected]
cd /pub/linux/kernel/v4.x
get sha256sums.asc

测试运行:

$ perl dummy.pl
cd ok, cwd=/pub/linux/kernel/v4.x
288261 bytes transferred
File transfer successful!
© www.soinside.com 2019 - 2024. All rights reserved.