python - 使用 python 记录文件和进程超时的输出

标签 python timeout subprocess flush

我正在浏览一大堆文件并对所有文件运行命令。我想记录输出,如果该命令对一个文件花费的时间超过 5 分钟,我想停止该命令并转到下一个文件。

我有两个问题:

  1. 我想将文件名记录到输出文件中,并记录输出消息。我使用 Popen 来记录消息并使用 communicate 来记录消息,但我使用 write() 写入的所有文件名都没有直到整个任务完成后才开始写作。

  2. 我不知道如何轮询进程并在 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]

最佳答案

  1. f.write(filename) 之后使用 f.flush()
  2. 参见Using module 'subprocess' with timeout

关于python - 使用 python 记录文件和进程超时的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4963891/

相关文章:

python-3.x - 导入错误: cannot import name getoutput

python - 如何判断脚本是独立运行还是作为Python中的子进程调用

python - 连接两个以 asyncio.subprocess.create_subprocess_exec() 启动的进程

python - 文本小部件内 Tkinter 中的滚动条

python - 需要将特定的列集转换为行,并将其余列转换为重复值

cuda - 启动 CUDA-Kernel 并设置超时

http - 如何使用 RavenDB 中的 key 诊断和防止 get 时的 http 超时

Python: turtle 大小(以像素为单位)

python - 将 pandas dataframe json 列切成列

php - curl 连接超时不起作用