Python循环问题

Python循环问题,python,function,loops,Python,Function,Loops,我有一个计算文件夹中文件数量的脚本,如果它小于最大数量,它将创建新文件,直到找到正确的数量。理想情况下,删除旧文件时,应生成新文件。问题是,如果一次只删除一个文件,我的代码有时不会创建新文件。有时会,有时不会。如果一次删除多个文件,它将始终创建新文件 import os cfcount = 0 maxcalls = 7 run = 1 filecount = 0 def callFile(channel, maxretries, retrytime, waittime, context, e

我有一个计算文件夹中文件数量的脚本,如果它小于最大数量,它将创建新文件,直到找到正确的数量。理想情况下,删除旧文件时,应生成新文件。问题是,如果一次只删除一个文件,我的代码有时不会创建新文件。有时会,有时不会。如果一次删除多个文件,它将始终创建新文件

import os

cfcount = 0
maxcalls = 7
run = 1
filecount = 0

def callFile(channel, maxretries, retrytime, waittime, context, ext):
    #create sting
    return callfile

def getCount():
    """Gets the number of callfiles in the directory"""
    count = 0
    files = os.listdir("c:\\proc")
    for file in files:
            if os.path.isfile("c:\\proc\\" + file):
                count += 1
                #print (count)
    return count

run = 1
while run == 1:
    """main loop that runs until there's no more people left to call"""
        filecount = getCount()    
        print (filecount)
        lacking_filecount = maxcalls - filecount
    while lacking_filecount > 0:
        cfcount += 1
        f = open("c:\proc\callfile" + str(cfcount) + ".call", 'w')
        f.write(callFile("SIP/200", '0', '0', '45', "call-file-test", '200'))
        f.close()
        print ("Filecount: " + str(filecount))
        print ("Callfile number: " + str(cfcount))
        lacking_filecount -= 1
如果我保留print(filecount)语句,我每次都能让它正常工作。如果我删除该语句,它有时有效,有时无效

这是输出

>>> 
0
Filecount: 0
Callfile number: 1
Filecount: 0
Callfile number: 2
Filecount: 0
Callfile number: 3
Filecount: 0
Callfile number: 4
Filecount: 0
Callfile number: 5
Filecount: 0
Callfile number: 6
Filecount: 0
Callfile number: 7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
如果没有打印(filecount),它看起来是这样的。它一直工作到9号左右,如果只删除了一个文件,它就停止替换新文件。注意,它仍然打印一个callfile编号

>>> 
Callfile number: 1
Callfile number: 2
Callfile number: 3
Callfile number: 4
Callfile number: 5
Callfile number: 6
Callfile number: 7
Callfile number: 8
Callfile number: 9
Callfile number: 10
Callfile number: 11
Callfile number: 12
这是getCount()循环内的打印(文件)输出。添加了打印语句后,它还没有起作用

Callfile number: 17
callfile1.call
callfile17.call
callfile2.call
callfile3.call
callfile4.call
callfile5.call
callfile6.call
callfile1.call
callfile17.call

似乎是正在创建的文件与显示在
os.listdir()
输出中的文件之间的竞争条件。大多数情况下,print语句可能需要足够的时间在系统上“修复”这个问题

为什么不更改逻辑,使其只调用一次
getCount()
,然后创建适当数量的文件

filecount = getCount()
lacking_filecount = maxcalls - filecount
while lacking_filecount > 0:
    # Create file...
    lacking_filecount -= 1

另外,您似乎有一个无限循环,因为您从未在循环中设置
run

不需要
而run==1
,Python有bool,这不是C:)进一步检查,我想我误解了这个问题。似乎循环中有比你发布的更多的东西——它在哪里终止?如果它在无限循环中运行,那么如果在下一次迭代中只检测到已删除的文件,为什么没有检测到它呢?除非在删除单个文件时(有时),您说
getCount()
始终返回错误的输出(在这种情况下,您使用的平台可能是相关的)?我不确定为什么,但它确实会在下一个循环中被检测到,并且它会进行计数,但如果只有一个文件被删除,它不会创建该文件,有时也不会。有些时候它工作得很好。我试着从空文件夹和满文件夹开始,但对我来说这似乎是随机的。我对linux非常陌生,但我觉得我应该寻找一种方法来钩住一个在文件被删除时触发的事件。
os.listdir()
的输出总是你所期望的吗?好吧,对不起,我被难住了。我很好奇,当你找到答案的时候,就发布一个答案!非常感谢你。我感到沮丧。这是我本来应该做的。无限循环只是因为我还没有计算出要运行多少次。@rhys:太好了,事后我不确定问题出在哪里:-)请注意,如果您希望循环运行到某个终止条件,而该终止条件(无论出于何种原因)不想放在loop语句的条件部分,通常的方法是使用
,而True:
,然后使用循环中的某个地方。它比一个控制变量更干净,更清晰。我更新了代码,它实际上做了同样的事情。但是速度更快。我要看看你从那以后说的话。也许是因为它在windows上?最终我会在linux上运行它,但我认为这无关紧要。@rhys:当一个文件被删除时,您是否仍在
os.listdir()
的输出中看到它(有时)?(我还在努力把问题弄清楚)