perl - Perl - Net::SFTP::Foreign
问题描述
我正在尝试使用 Net::SFTP::Foreign 在 Perl 中编写上传脚本。
我在检查目录是否存在时遇到问题,如果不存在,则创建它。
如果目录不存在,Net::SFTP::Foreign 似乎只是错误并关闭连接,并且从不运行“else”
您可以看到下面的代码,任何人都可以看到我哪里出错了吗?
sub uploadtoftp
{
use Net::SFTP::Foreign;
use File::Basename;
use warnings;
my $host=$_[0];
my $user=$_[1];
my $pw=$_[2];
my $home_directory ="/home/testuser";
my $remote_path=$home_directory."/".$name."/".$destination_dir;
if (my $ftp = Net::SFTP::Foreign->new($host,
user => $user,
password => $pw,
autodie => 0))
{
my $destination_dir_proceed=0;
$ftp->find("$remote_path", on_error => sub { print "Creating directory\n"; $ftp->mkdir("$remote_path") });
print $ftp->error;
if($ftp->opendir($remote_path))
{
$destination_dir_proceed=1;
}
if($destination_dir_proceed==1)
{
# --- loop through file list and upload all new files
foreach $filename (split(/ /, $file_list))
{
$ftp->put($filename,$remote_path.$filename);
}
}
else
{
print "cannot reach directory $remote_path\n";
}
}
} # end subroutine uploadtoftp()
解决方案
当您实例化 Net::SFTP::Foreign 对象时,您使用autodie => 1
.
Autodie将“自动将不可恢复的错误提升为执行”。
只要您在整个脚本中定期检查状态,您就可以删除 autodie 行并没问题。
如果有想死的地方,可以在发出请求后使用die_on_error
推荐阅读
- android - Kotlin RecyclerView DataBindingAdapter 不知道为什么会报错
- arrays - 矩阵 - 向量值匹配
- firebase - 我收到一个错误 NoSuchMethodError: The method currentUser was called on null.FLUTTER
- c# - 使用语句关闭后锁定的 System.Drawing 图像
- .net - Microsoft.Office.Interop.Outlook._MailItem 在某些系统上为空白
- php - PHP - 使用 cURL 发送 GET 请求
- c++ - EXPECT_DEATH 的倒数是什么?
- git - 为什么 Git 使用类似“origin foo”、“remotes/origin/foo”和“origin/foo”这样容易混淆的名称?
- excel - 如果工作表上有数据,则尝试制作新工作簿
- scala - 使用 Spark 和 scala 编写 CSV 文件 - 空引号而不是 Null 值