我正在浏览一大堆文件并对所有文件运行命令。我想记录输出,如果该命令对一个文件花费的时间超过 5 分钟,我想停止该命令并转到下一个文件。
我有两个问题:
我想将文件名记录到输出文件中,并记录输出消息。我使用
Popen
来记录消息并使用communicate
来记录消息,但我使用write()
写入的所有文件名都没有直到整个任务完成后才开始写作。我不知道如何轮询进程并在 5 分钟后退出并转到下一个文件。
下面是简化的代码:
import os, fnmatch
import subprocess
import sys
f=open('filenames','w')
'Locate all files matching supplied filename pattern in and below supplied root directory.'''
def locate(pattern, root=os.curdir):
for path, dirs, files in os.walk(os.path.abspath(root)):
for filename in fnmatch.filter(files, pattern):
yield os.path.join(path, filename)
for filename in locate("*.dll"):
f.write(filename)
#cmd defintion is changed for simplicity
cmd='cat %s' %filename
p=subprocess.Popen(cmd,stdout=f)
p.communicate()[0]
最佳答案
- 在
f.write(filename)
之后使用f.flush()
。 - 参见Using module 'subprocess' with timeout
关于python - 使用 python 记录文件和进程超时的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4963891/