我正在尝试编写一个简单的脚本,该脚本监视要保存的(TDMS)文件,然后打开该文件以检索一个值。
看门狗工作正常,并将event.src_path传递给GET_DATA函数。当文件试图打开时,我得到一个错误..
"PermissionError:错误13权限被拒绝:'C:\PythonTargetDirectory\example.tdms'“
如果我使用文件名作为参数,它将打开文件并检索数据。这当然意味着权限是正确的,可以打开它吗?
有人能帮帮忙吗?
import nptdms
import numpy
import watchdog.events
import watchdog.observers
import time
class Handler(watchdog.events.PatternMatchingEventHandler):
def __init__(self):
# Set the patterns for PatternMatchingEventHandler
watchdog.events.PatternMatchingEventHandler.__init__(self, patterns=['*.tdms'],
ignore_directories=False, case_sensitive=False)
def on_created(self, event):
print("Event created - % s." % event.src_path)
GET_DATA(event.src_path)
def GET_DATA(filename):
print("DATA FUNC:",filename)
tdms_file = nptdms.TdmsFile.open(filename)
group = tdms_file["Ramp 15"]
# all_groups = tdms_file.groups()
channel = group["TorqueTransducer"]
data = channel[:]
print(group)
print(channel)
print(numpy.max(data))
if __name__ == "__main__":
src_path = r"C:\PythonTargetDirectory"
event_handler = Handler()
observer = watchdog.observers.Observer()
observer.schedule(event_handler, path=src_path, recursive=True)
observer.start()
try:
while True:
time.sleep(60)
except KeyboardInterrupt:
observer.stop()
observer.join()
else:
while True:
time.sleep(60)发布于 2021-06-17 20:24:52
我已经回答过这个问题了!
在调用GET_DATA函数之前,请暂停以正确保存文件,5秒效果很好。简单示例
def on_created(self, event):
print("Event created - % s." % event.src_path)
time.sleep(5)
GET_DATA(event.src_path)发布于 2021-06-26 23:01:41
如果文件很大,5秒的延迟可能还不够。相反,您可以进行简单的检查,以重复比较具有延迟的文件大小。文件完全创建后,文件大小保持不变,您可以继续读取该文件。
我在下面的链接中找到了这个信息。它还提到了其他方式。https://www.py4u.net/discuss/187495
def wait_till_file_is_created(self, source_path):
historicalSize = -1
while (historicalSize != os.path.getsize(source_path)):
historicalSize = os.path.getsize(source_path)
time.sleep(1) # Wait for one second
def on_created(self, event):
print("Event created - % s." % event.src_path)
self.wait_till_file_is_created(event.src_path)
GET_DATA(event.src_path)https://stackoverflow.com/questions/68006819
复制相似问题