我在程序中遇到错误,该程序应该运行很长时间才能打开太多文件.有什么方法可以跟踪哪些文件是打开的,所以我可以偶尔打印出这个列表,看看问题出在哪里?
您好我正在寻找一种方法来确定使用Python在我的整个系统(Linux)中打开哪些文件.我找不到任何这样做的模块.
或者也许唯一的方法是使用命令lsof?
谢谢!
我想打开一个由另一个应用程序定期写入的文件.此应用程序无法修改.因此,当我知道文件未被其他应用程序写入时,我只想打开该文件.
有没有pythonic方式来做到这一点?否则,我如何在Unix和Windows中实现这一目标?
编辑:我会尽力澄清.有没有办法检查当前文件是否已被其他应用程序打开?
我想从这个问题开始.那些其他应用程序读/写是否与现在无关.
我意识到它可能依赖于操作系统,所以现在可能并不真正与python相关.
假设以下目录结构:
A
+-- B
| +-- C
| | +-- D
| | | +-- E
Run Code Online (Sandbox Code Playgroud)
其中没有目录包含任何文件(甚至不可见的文件)。跑步
os.rmdir("A/B/C/D/E"); os.rmdir("A/B/C/D"); os.rmdir("A/B/C"); os.rmdir("A/B"); os.rmdir("A")
Run Code Online (Sandbox Code Playgroud)
在 Python (3.5) 中产生
OSError: [WinError 145] The directory is not empty: '##'
Run Code Online (Sandbox Code Playgroud)
其中##或者是A,B,C或D,但在执行各功能手动不产生此异常。我知道有shutil.rmtree,但文件os.rmdir明确指出
移除(删除)目录路径。仅在目录为空时有效,否则
OSError会引发。为了删除整个目录树,shutil.rmtree()可以使用。
至少在 Windows 系统上,情况似乎并非如此。到目前为止我发现的唯一解决方法(不包括shutil.rmtree)是
def rm (dir_path):
while len(os.listdir(dir_path)) > 0:
pass # Maybe include timeout here to not lock the program …Run Code Online (Sandbox Code Playgroud)