代码:
try:
ajoLogi.ajoLogi("Onko tiedosto "+dst+" jo palvelimella", "Stat")
stat = sftpClient.stat(dst)
print(stat)
if stat.st_mtime != 0 :
leima = datetime.fromtimestamp(stat.st_mtime)
ajoLogi.ajoLogi("Tiedoston aikaleima:"+leima.strftime('%Y-%m-%d %H:%M:%S'), "Stat")
else :
ajoLogi.ajoLogi("Tiedoston aikaleima on nolla", "Stat")
continue
结果:
drwx------ 1 0 0 0 01 Jan 1980 ?
目标sftp-server上不存在文件 - 预期结果是异常。
同样的代码可以按预期与我的测试服务器一起使用,抛出异常。此外,stat还会返回现有文件的相同结果。原始文件已通过相同的用户ID和相同的脚本传输到目标sftp服务器。
知道这里发生了什么,以及如何解决这个问题?
除了使用的低访问权限sftp-account之外,我没有任何其他目标服务器访问权限。使用手动sftp命令尝试使用相同的帐户会显示该文件不存在,并允许放置和删除文件。
部分解决方案
导致问题的服务器是:“SSH-2.0-6.4.10.264 SSH Tectia Server”,它要求所有路径都是绝对的 - 即以'/'开头。没有这一切都失败了。
使用“SSH-2.0-6.4.7.204 SSH Tectia Server”,我测试的服务器,服务器要求所有路径都是相对的或一切都失败。
后者对绝对路径的作用 - 根据Windows应用程序日志:
2016 Sft_server_stat_file_failed, "2016 Sft_server_stat_file_failed,
File name: /7120/in/FPVI4170.ERI, "Error: Permission denied",
Session-Id: 8745309"
以及相对路径:
2015 Sft_server_stat_file, "2015 Sft_server_stat_file,
File name: \\xxxxx.yyyy.local\files\user.name\7120\in\FPVI4170.ERI,
"Success", Session-Id: 8745716"
当找不到路径时,您尝试使用stat,那么两个服务器版本都将返回相同的虚假统计信息(参见上文)。
我个人为有用的错误消息欢呼:“权限被拒绝”它与stat-command返回的内容一致。如果事件日志会破坏寻找失败的实际原因的乐趣,那将是非常可怕的。