#python #system #watchdog
Вопрос:
Я пытаюсь написать простой скрипт, который следит за сохранением файла (TDMS), а затем открывает файл для получения значения.
Сторожевая сторона работает нормально и передает event.src_path функции GET_DATA. Когда файл пытается открыться, я получаю сообщение об ошибке..
«Ошибка разрешения: [Ошибка 13] Отказано в разрешении: ‘C:PythonTargetDirectoryexample.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)
Ответ №1:
Я сам ответил на этот вопрос!!
Поставьте паузу для правильного сохранения файла, 5 секунд работает хорошо, прежде чем вызывать функцию GET_DATA. Simples
def on_created(self, event):
print("Event created - % s." % event.src_path)
time.sleep(5)
GET_DATA(event.src_path)
Ответ №2:
Если размер файла большой, 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)