Python“while”循环带有“if”语句

时间:2015-01-20 13:37:43

标签: python if-statement while-loop

我遇到了一些问题" if"在我的开始时的声明"而#34;环。我的目标是检查是否已将三个文件下载到工作站。如果是这样,脚本开始下一个任务。否则,脚本等待300秒并再次尝试下载文件,只要成功需要。到目前为止,我有类似下面发布的代码,似乎工作正常,但结果最终是错误的。

if not os.path.exists(somefile_1) or not os.path.exists(somefile_2) or not os.path.exists(somefile_3):
        readyToSend = 0
        while (readyToSend == 0):
            if not os.path.exists(somefile_1) or not os.path.exists(somefile_2) or not os.path.exists(somefile_3):
                print 'There are some files missing. Restarting script.'
                lgr.info('There are some files missing. Restarting script.')
                start=300
                while start > 0:
                    time.sleep(1)
                    print 'Script will restart automatically in: ', start, '\r',
                    start -=1
                removePIDfile()
                execfile(r'D:\Workspace\tools\PKG_Maker\PKG_Maker.py')
            elif os.path.exists(somefile_1) and os.path.exists(somefile_2) and os.path.exists(somefile_3):
                readyToSend = 1
                print 'Restarting script not necessary. Files downloaded.'

我很确定使用相同的" if"语句两次是没用的,但没有这个,循环启动计时器(内部的微小循环),甚至没有检查这些文件是否存在。

上面这部分代码没有按预期工作。我发现即使我可以在工作站上看到文件,我也会得到一些文件丢失的输出。搞砸了这些"如果" "而"而"声明和现在(由于我的经验不足)我无法弄清楚......

我愿意学习,也许有人能告诉我该怎么做或者哪一部分毁了这个。

1 个答案:

答案 0 :(得分:1)

当您以相同的方式处理它们时,您将分别处理三个文件。我建议如下:

from os.path import exists

ready = 0
files = [somefile_1, somefile_2, somefile_3]

while not all(exists(f) for f in files):
    print 'There are some files missing. Restarting script.'
    sleep(300)
    removePIDfile()
    execfile(r'D:\Workspace\tools\PKG_Maker\PKG_Maker.py')

print 'Files downloaded'

这也删除了额外的if语句等。由于您没有提供PKG_Maker.py中的任何代码,因此我无法真正帮助您,但由于它也是python,因此您可以直接从循环中调用它而不是使用execfile。 / p>