У меня есть скрипт, который подсчитывает количество файлов в папке, и если он меньше максимального числа, он создает новые файлы, пока не найдется правильное число. В идеале, поскольку старые файлы удаляются, новые должны быть сгенерированы. Проблема в том, что мой код иногда не создает новый файл, если одновременно удаляется только один файл. Иногда так будет, иногда нет. Он всегда будет создавать новые файлы, если более одного будет удалено одновременно.
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 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
Это вывод из print (file) внутри цикла getCount (). Это еще не работало с этим оператором печати.
Callfile number: 17
callfile1.call
callfile17.call
callfile2.call
callfile3.call
callfile4.call
callfile5.call
callfile6.call
callfile1.call
callfile17.call