Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 脚本只运行一次,即使我';我用的是;while(True)“;_Python_While Loop - Fatal编程技术网

Python 脚本只运行一次,即使我';我用的是;while(True)“;

Python 脚本只运行一次,即使我';我用的是;while(True)“;,python,while-loop,Python,While Loop,我正在编写一个Python脚本,它进入给定的目录并根据修改日期删除文件。我已经让它的大部分工作(令人惊讶!),除了我发现了一个bug。让我给大家介绍一下我的程序是如何工作的 因此,如果用户请求程序安静运行,我会将所有stdout和stderr信息重定向到temp文件夹中的temp文本文件。很好用。还有一个选项可以连续运行脚本。我使用了一个简单的while(True)循环来实现这一点。连续运行工作得非常好,直到每次循环后我想删除那个临时文件夹。以下是我的主要功能中的代码: while(Tr

我正在编写一个Python脚本,它进入给定的目录并根据修改日期删除文件。我已经让它的大部分工作(令人惊讶!),除了我发现了一个bug。让我给大家介绍一下我的程序是如何工作的

因此,如果用户请求程序安静运行,我会将所有stdout和stderr信息重定向到temp文件夹中的temp文本文件。很好用。还有一个选项可以连续运行脚本。我使用了一个简单的while(True)循环来实现这一点。连续运行工作得非常好,直到每次循环后我想删除那个临时文件夹。以下是我的主要功能中的代码:

    while(True):

        display()
        verifyDirectory()
        checkArgs()            
        # Deleting the temporary folder after each loop:
        if args.q:
            deleteTempFolder()
同样,在我尝试在每次循环后删除临时文件夹之前,一切都很顺利。第一个循环完成后,程序基本停止。以下是deleteTempFolder()下的代码:

我还应该注意到,上面的所有代码都可以独立工作,但是当我将这两个代码结合起来(连续运行并删除临时文件夹)时,我注意到我打破了循环

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


我希望所有这些都有意义。这是我第一次在这里提问,这是我写的第一个脚本,它不是一个愚蠢的Java视频游戏。我希望稍后发布整个脚本,以获得关于效率的建议

由于错误流已关闭,可能会引发异常但未显示。尝试此代码(
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")

多亏了这里所有的反馈,我找到了问题的解决方案。我发现我的程序正在生成错误,但在注释掉sys.stderr.close()之前我无法看到。当我看到程序崩溃的时间和地点时,我发现我从来没有在循环中重新创建临时文件夹,这有点尴尬!感谢所有的反馈

是否在每个循环开始时重新创建文件夹?否则它可能会失败,因为您正试图删除一些不存在的内容。我的主要怀疑是正在生成异常,但由于某种原因,它不会显示在重定向的stderr中。你能删除任何修改了sys.stdout或sys.stderr的东西吗?看看控制台上的输出是什么?哇!你们真快@Dannnno:调用checkArgs()函数时,确实会重新创建文件夹。当我不调用deleteTempFolder()时,程序会连续运行,并且只会一次又一次地附加到同一个文件中。如果让程序运行几分钟,stdout.txt文件就会变得相当大。所以,我认为在每次循环之后删除会更有效。我想知道我是否应该在这里发布整个脚本,但我认为这可能是个禁忌。@Kevin:删除任何修改它们的内容?你的意思是我暂时不应该重定向它们吗?也许只是删除一个空文件夹?对不起,我没听懂…@Dannnno:原来你是对的。我没有在循环中重新创建文件夹。一旦我能够看到正在产生的错误,我就将问题追溯到那个“新手”错误。非常感谢!好的,我现在看到一些例外。当我保留sys.stdout.close()行时,我得到的是“对已关闭文件的I/O操作”。当我对该行进行注释时,我得到“该进程无法访问该文件,因为它正被另一个进程使用”。我注意到,当我保存os.remove(stdoutPath)和os.rmdir(文件夹)时,会发生这个错误。没有这三行代码,代码就可以正常工作。。。减去事实,它实际上没有做我想要的,哈哈:)这是非常有帮助的,谢谢!我能够看到异常,我解决了我的问题!
import sys

print("Hello, world")

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

# NameError: name 'nosuchfunction' is not defined
nosuchfunction

print("Goodbye, world")