脚本只运行一次,即使我使用“while(True)”

时间:2015-08-06 14:51:06

标签: python while-loop

我正在处理进入给定目录的Python脚本,并根据修改日期删除文件。我已经把它的大部分工作(令人惊讶!),除了我发现了一个bug。让我对你的程序如何运作有所了解。

因此,如果用户请求程序安静地运行,我将所有stdout和stderr信息重定向到临时文件夹中的临时文本文件。工作得很好。还可以选择连续运行脚本。我用一个简单的while(True)循环来完成这个。运行连续工作所有罚款和花花公子,直到我想在每个循环后删除该临时文件夹。这是我的主要功能中的代码:

updateSub0

同样,一切正常,直到我尝试在每次循环后删除temp文件夹。程序基本上在第一个循环完成后停止。这是deleteTempFolder()下的代码:

    while(True):

        display()
        verifyDirectory()
        checkArgs()            
        # Deleting the temporary folder after each loop:
        if args.q:
            deleteTempFolder()

我还应该注意,上面的所有代码都可以正常工作,但是当我将两者结合起来(连续运行并删除临时文件夹)时,我注意到我突然出现了循环。

此外,不会生成任何错误或异常。我能够通过将stderr文件重定向到另一个位置来检查它,所以当我运行代码时它不会被删除。

我希望所有这一切都有道理。这是我第一次在这里问一个问题,这是我写过的第一个脚本,这个脚本并不是Java中用于课程的愚蠢视频游戏。我希望稍后发布整个脚本以获得有关效率的建议!

2 个答案:

答案 0 :(得分:2)

可能会抛出异常但由于错误流已关闭而未显示。试试这段代码(python boom.py)并注释掉sys.stderr.close()行:

import sys

print("Hello, world")

# this will prevent displaying the exception
sys.stderr.close()

# NameError: name 'nosuchfunction' is not defined
nosuchfunction

print("Goodbye, world")

答案 1 :(得分:1)

由于这里的所有反馈,我找到了问题的解决方案。事实证明,我的程序产生了错误,但直到我注释掉sys.stderr.close()之前我才能看到。一旦我看到程序崩溃的地点和时间,我就发现我从未在循环中重新创建临时文件夹,这有点令人尴尬!感谢您的所有反馈!