You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SFTP文件停留时长检测Python脚本问题求助

解决SFTP文件停留时长统计问题

问题根源

你当前使用的st_mtime是文件的最后修改时间,文件上传到SFTP后如果没有被修改,这个时间会一直保持不变,自然无法得到递增的停留时长。下面提供两种可行的改进方案:


方案一:记录文件首次被检测到的时间

这是最可靠的通用方案,不依赖SFTP服务器的特殊属性:

  • 核心逻辑:脚本第一次检测到文件存在时,记录当前时间;之后每次运行用当前时间减去首次记录的时间,得到文件的停留时长。
  • 改进后的代码:
import time
import datetime

# 初始化首次检测时间为None
first_detected_time = None

while True:
    try:
        # 检查文件是否存在
        file_stat = sftp_client.stat(sftp_directory + '/vaishant_test2.log')
        
        if first_detected_time is None:
            # 首次发现文件,记录当前时间(建议和SFTP服务器时区保持一致)
            first_detected_time = datetime.datetime.now()
            print(f"首次检测到文件:{first_detected_time.strftime('%H:%M:%S')}")
        else:
            # 计算并输出停留时长
            current_time = datetime.datetime.now()
            duration = current_time - first_detected_time
            mins = int(duration.total_seconds() // 60)
            secs = int(duration.total_seconds() % 60)
            print(f"文件已停留:{mins}分钟 {secs}秒")
            
    except FileNotFoundError:
        # 文件不存在时重置记录
        first_detected_time = None
        print("文件未找到")
        
    time.sleep(60)
  • 补充:如果脚本可能重启,可将first_detected_time写入本地文件(如JSON、TXT)做持久化,避免重启后丢失记录。

方案二:获取SFTP服务器的文件创建时间(依赖服务器支持)

部分SFTP服务器会提供文件的创建时间字段,但不同系统的字段名和含义有差异:

  • Unix类系统:st_ctime是文件元数据修改时间,而非创建时间;BSD系统支持st_birthtime表示创建时间。
  • Windows系统:st_ctime就是文件创建时间。
  • 代码示例:
import datetime

file_stat = sftp_client.stat(sftp_directory + '/vaishant_test2.log')

# 尝试获取创建时间
try:
    creation_timestamp = file_stat.st_birthtime  # BSD/Linux部分环境支持
except AttributeError:
    creation_timestamp = file_stat.st_ctime  # fallback到st_ctime,需确认服务器实际含义

# 转换为可读时间并计算停留时长
creation_time = datetime.datetime.fromtimestamp(creation_timestamp)
current_time = datetime.datetime.now()
duration = current_time - creation_time

print(f"文件创建时间:{creation_time.strftime('%Y-%m-%d %H:%M:%S')}")
print(f"文件已停留:{int(duration.total_seconds()//3600)}小时 {int(duration.total_seconds()%3600//60)}分钟")
  • 注意:该方案需要提前测试SFTP服务器返回的时间字段是否为真实的文件上传/创建时间,避免统计误差。

关键注意事项

  • 时区一致性:确保脚本运行的本地时间与SFTP服务器时间时区一致,或统一使用UTC时间计算,避免时长统计出现偏差。
  • 异常处理:需处理文件被删除、SFTP连接中断等异常情况,保证脚本稳定性。

内容的提问来源于stack exchange,提问作者Vaishant Sah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 19:04:52