仅在TCL中读取文件

时间:2018-10-26 10:53:09

标签: file tcl

我需要从报告文件(简单的文本报告文件)中读取内容,但可能是该文件仍在生成中-因此我需要等待。本质上,等待写入文件的所有其他进程完成后再从文件中读取-是否可以在TCL中执行此操作?

更多信息: 写入报告文件的过程是第三方-我无法控制它。我在报告周期即将结束时开始阅读,并且阅读的启动是由父级第三方应用程序控制的-因此我无法延迟阅读。 TCL中没有办法查询文件是否打开或正在更新等。我可以等待状态清除吗?

1 个答案:

答案 0 :(得分:0)

如果该文件是本地文件,并且您正在某种POSIX平台(例如Linux或macOS)上运行,则可以使用lsof -t l i s t(通过 o pen f iles, t ersely)来查找打开文件的进程。

# A slightly weird way of calling because we ignore the errors
set thefile /path/to/thefile.data
set pids {}
catch {
    set pids [exec lsof -t $thefile]
}

这会将pids设置为具有文件的进程列表(按ID);如果您打开它,它将包括当前过程!您可能会或可能不会在乎。

请注意:这是一项昂贵的操作。生成PID列表可能需要花费几秒钟的时间。