【发布时间】:2015-08-06 14:51:05
【问题描述】:
我正在编写一个 Python 脚本,该脚本进入给定目录并根据修改日期删除文件。我已经完成了大部分工作(令人惊讶!),除了我发现了一个错误。让我让大家深入了解我的程序是如何工作的。
因此,如果用户请求程序安静地运行,我会将所有 stdout 和 stderr 信息重定向到临时文件夹中的临时文本文件。工作得很好。还有一个选项可以连续运行脚本。我使用了一个简单的 while(True) 循环来完成此操作。连续运行一切正常,花花公子,直到我想在每次循环后删除那个临时文件夹。这是我的主要功能中的代码:
while(True):
display()
verifyDirectory()
checkArgs()
# Deleting the temporary folder after each loop:
if args.q:
deleteTempFolder()
再次,一切正常,直到我尝试在每次循环后删除临时文件夹。程序基本上在第一个循环完成后停止。下面是deleteTempFolder()下的代码:
# Closing the redirected text files.
sys.stdout.close()
sys.stderr.close()
# Defining the paths for the temp folder and the existing text files.
folder = args.directory + "\\" + "temp"
stdoutPath = folder + "\\" + "stdout.txt"
stderrPath = folder + "\\" + "stderr.txt"
# Deleting the text files first, then deleting the entire temporary folder.
os.remove(stdoutPath)
os.remove(stderrPath)
os.rmdir(folder)
我还应该注意,以上所有代码都可以单独运行,但是当我将两者结合起来(连续运行并删除临时文件夹)时,我注意到我打破了循环。
此外,不会产生任何错误或异常。我可以通过将 stderr 文件重定向到另一个位置来检查它,因此在我运行代码时它不会被删除。
我希望所有这些都有意义。这是我第一次在这里提出问题,这是我编写的第一个脚本,它不是用于课程的愚蠢的 Java 视频游戏。我希望稍后发布整个脚本以获取有关效率的建议!
【问题讨论】:
-
您是否在每个循环开始时重新创建文件夹?否则它可能会失败,因为你试图删除不存在的东西。
-
我的主要怀疑是生成了一个异常正在,但由于某种原因它没有出现在您的重定向标准错误中。你能删除任何修改
sys.stdout或sys.stderr的东西,看看控制台上的输出是什么? -
哇!你们真快! @Dannnno:调用 checkArgs() 函数时确实会重新创建该文件夹。当我不调用 deleteTempFolder() 时,程序会连续运行,只是一遍又一遍地附加到同一个文件中。如果我让程序运行几分钟,stdout.txt 文件会变得相当大。所以,我认为在每个循环之后删除会更有效。我想知道我是否应该在这里发布整个脚本,但我认为这可能是不行的。
-
@Kevin:删除任何修改它们的东西?你的意思是我不应该暂时不重定向它们吗?也许只是删除一个空的空白文件夹?抱歉,我没有关注...
-
@Dannnno :事实证明你是对的。我没有在循环中重新创建文件夹。一旦我能够看到正在生成的错误,我就会将我的问题追溯到那个“新手”错误。非常感谢!
标签: python while-loop