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

如何在Python中检查文件是否关闭以解决‘text file busy’删除报错?

嗨,这个问题我之前也碰到过——处理pcap文件时偶尔会遇到进程还没释放文件就执行删除的情况,导致「text file busy」错误。下面给你一套完整的bash脚本实现方案,从生成过滤后的pcap,到检查文件状态再安全删除:

1. 用tshark过滤pcap并收集文件名到数组

首先我们先完成第一步:处理大型pcap,过滤出目标数据包并保存,同时把新文件的路径存入数组。你可以根据实际需求修改tshark的过滤规则:

# 初始化存储文件名的数组
filename_array=()

# 示例:过滤TCP 80端口的数据包,保存为filtered_tcp80.pcap
tshark -r large.pcap -Y "tcp.port == 80" -w filtered_tcp80.pcap
# 将文件名加入数组
filename_array+=("filtered_tcp80.pcap")

# 可以添加更多过滤任务,比如过滤UDP 53端口
tshark -r large.pcap -Y "udp.port == 53" -w filtered_udp53.pcap
filename_array+=("filtered_udp53.pcap")
2. 编写检查文件是否被占用的函数

我们用lsof命令来检测文件是否被进程打开——这个工具能列出系统中所有被打开的文件及对应的进程。下面是封装好的检查函数:

# 检查指定文件是否被任何进程占用
is_file_open() {
    local target_file="$1"
    # lsof返回0表示文件被打开,非0则表示未被占用
    lsof "$target_file" > /dev/null 2>&1
    return $?
}
3. 等待所有文件关闭后执行删除

接下来我们写核心逻辑:循环检查数组中的所有文件,直到它们都被释放(或者超时终止),再执行删除操作。这里加入了超时机制,避免无限等待:

# 设置超时时间(单位:秒),可根据实际情况调整
TIMEOUT=300
start_timestamp=$(date +%s)

# 循环检查所有文件状态
while true; do
    all_files_closed=true

    # 遍历数组中的每个文件
    for file in "${filename_array[@]}"; do
        if is_file_open "$file"; then
            echo "⚠️ 文件 $file 仍被进程占用,继续等待..."
            all_files_closed=false
            break
        fi
    done

    # 所有文件都已关闭,开始删除
    if $all_files_closed; then
        echo "✅ 所有文件已释放,开始执行删除..."
        break
    fi

    # 检查是否超时
    current_timestamp=$(date +%s)
    elapsed_time=$((current_timestamp - start_timestamp))
    if [ $elapsed_time -ge $TIMEOUT ]; then
        echo "❌ 等待超时,部分文件仍未关闭,终止删除操作"
        exit 1
    fi

    # 每隔2秒检查一次,可调整检查间隔
    sleep 2
done

# 遍历数组删除所有文件
for file in "${filename_array[@]}"; do
    if rm -f "$file"; then
        echo "✅ 成功删除文件: $file"
    else
        echo "❌ 删除文件失败: $file"
    fi
done
额外注意事项
  • 确保你的系统已经安装了lsof:Debian/Ubuntu可以用sudo apt install lsof,RHEL/CentOS用sudo yum install lsof。
  • 如果文件被特权进程(比如root权限的进程)打开,你需要用sudo运行脚本,否则lsof可能检测不到该进程。
  • 正常情况下tshark执行完成后会自动释放文件,但如果有其他外部进程(比如日志工具、备份脚本)打开了这些pcap,这个检查逻辑就能帮你避免删除错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:49:19