我有一个包含此代码片段的Perl脚本,它调用系统shell以通过SFTP获取一些文件并使用WinZip解压缩它们:
# Run script to get files from remote server
system "exec_SFTP.vbs";
# Unzip any files that were retrieved
foreach $zipFile (<*.zip>) {
system "wzunzip $zipFile";
}
Run Code Online (Sandbox Code Playgroud)
即使检索到某些文件,它们也永远不会被解压缩,因为在检索文件并关闭SFTP连接时,Perl脚本已经完成了解压缩步骤,结果是找不到要解压缩的内容.
我的短期修复是插入
sleep(60);
Run Code Online (Sandbox Code Playgroud)
在解压缩步骤之前,但假设SFTP连接将在60秒内完成,这有时可能是总估计过高,有时则是低估.
在继续解压缩步骤之前,是否有更合理的方法使Perl暂停直到SFTP连接关闭?
编辑:响应者质疑(并且合理地)使用VB脚本而不是让Perl进行文件传输.它与安全性有关 - VB脚本由其他人维护,并有权执行SFTP.