【发布时间】:2025-12-28 08:45:06
【问题描述】:
我有一个脚本可以计算文件夹中文件的数量,如果它小于最大数量,它会创建新文件,直到有正确的数量。理想情况下,当旧文件被删除时,应该生成新文件。问题是,如果一次只删除一个文件,我的代码有时不会创建新文件。有时会,有时不会。如果一次删除多个文件,它将始终创建新文件。
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
没有 print(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() 循环内 print(file) 的输出。它还没有与添加的打印语句一起工作。
Callfile number: 17
callfile1.call
callfile17.call
callfile2.call
callfile3.call
callfile4.call
callfile5.call
callfile6.call
callfile1.call
callfile17.call
【问题讨论】:
-
不需要
while run == 1,Python 有 bool,这不是 C :) -
经过进一步检查,我想我误解了这个问题。似乎循环的内容比您发布的要多——它在哪里终止?如果它在无限循环中运行,那么如果在下一次迭代中才检测到已删除的文件,为什么没有检测到它是一个问题?除非您说
getCount()在删除单个文件时(有时)始终返回错误的输出(在这种情况下,您使用的平台可能是相关的)? -
我不知道为什么,但它确实会在下一个循环中被检测到,它会触发 cfcount 但它不会创建文件,如果只有一个被删除并且只是有时。其他时候它工作得很好。我试过从空文件夹和完整文件夹开始,对我来说似乎是随机的。我对 linux 很陌生,但我觉得我应该寻找一种方法来挂钩在删除文件时触发的事件。
-
将该部分(文件系统事件)作为单独的问题发布。
os.listdir()的输出是否始终如您所愿? -
好吧,我很难过,对不起。当你弄清楚时发布答案,我很好奇!