在Python中使用subprocess将输出写入文件

0 投票
2 回答
833 浏览
提问于 2025-04-17 00:19

我有一段代码,最多可以同时启动4个进程。它会检查是否有新的任务提交,如果有,就会运行相应的Python代码。

for index,row in enumerate(rows):
    if index < 4:
        dirs=row[0]
        dirName=os.path.join(homeFolder,dirs)
        logFile=os.path.join(dirName,(dirs+".log"))
        proc=subprocess.Popen(["python","test.py",dirs],stdout=open(logFile,'w'))

我有几个问题:

  1. 当我尝试将输出或错误信息写入日志文件时,文件不会立即更新,而是等到进程完成后才写入。有没有办法让输出在进程运行时就写入文件?这样我就能知道它正在进行到哪个阶段。
  2. 当一个进程完成后,我希望下一个排队的任务能立即运行,而不是等所有子进程都完成后,守护进程才开始新的任务。

任何帮助都非常感谢!

2 个回答

1

关于第一点,试着调整一下用于日志文件的缓冲设置

open(logFile,'w', 1) # line-buffered (writes to the file after each logged line)
open(logFile,'w', 0) # unbuffered (should immediately write to the file)

如果这样能满足你的需求,建议你选择行缓冲,而不是无缓冲。

至于你提到的整体问题,正如@Tichodroma所建议的,试试Python的多进程模块吧。

1

关于第2点,你可以去看看这个链接:http://docs.python.org/library/multiprocessing.html

撰写回答