【问题标题】:End a loop when all txt files in a directory have some text inside当目录中的所有txt文件都包含一些文本时结束循环
【发布时间】:2016-12-13 20:20:54
【问题描述】:

我有一些子进程正在运行,stdout txt 文件位于输出文件夹中。 我想通过循环遍历输出文件夹中的所有文件来等待所有子进程,如果它们将具有“退出”字符串,该字符串总是在 stdout txt 文件中写入的进程的末尾。 感谢您的帮助。

这就是我所拥有的:

    for file in glob.glob("filename*.txt"):
        with open(file, "r").read() as f:
            if "exit" in f:
                break

但是当其中一个文件退出时它会中断。 While False on start 应该是一个好的解决方案吗?而不是 break put continue?

【问题讨论】:

  • 从编写列出给定文件夹中所有文件的代码开始。 HintHint。获得列出所有文件的代码后,请再次提出您的问题。在 SO 上索取代码只是在寻找要结束的问题。
  • 很抱歉没有把我的代码。当所有这些文件都满足条件时,我只是不知道如何结束循环

标签: python subprocess wait


【解决方案1】:

您需要循环直到满足您的条件。您可以在 while True: 循环中使用 break 来完成此操作。

file_names = glob.glob("/tmp/foo*.txt")
while True:
    if not file_names:
        break
    for file_name in file_names:
        with open(file_name, "r") as f:
            if "exit" in f.read():
                file_names.remove(file_name)

这里进入了一个无限循环,只有在file_names 变量为空时才会退出。如果它不为空,它将遍历该变量,打开并读取文件。如果文件包含“exit”,那么它会从列表中删除该文件名。

您可能需要考虑执行time.sleep,这样您就不会破坏文件系统,但这取决于您预计等待多长时间。也可能是超时。

【讨论】:

  • 为了健壮性,锐化 OP 的规范可能是个好主意,这样关键字“exit”必须单独出现在一行中
猜你喜欢
  • 2018-01-02
  • 2011-03-04
  • 1970-01-01
  • 1970-01-01
  • 2014-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多