#python #docker #synology #home-assistant
Вопрос:
Настройка: Synology с докером, работающим на дому-Помощник с интеграцией HACS и pyscript.
Я сделал следующие две функции:
@service
def getListOfFiles(dirName):
import os
# create a list of file and sub directories
# names in the given directory
listOfFile = os.listdir(dirName)
allFiles = list()
# Iterate over all the entries
for entry in listOfFile:
# Create full path
fullPath = os.path.join(dirName, entry)
# If entry is a directory then get the list of files in this directory
if os.path.isdir(fullPath):
allFiles = allFiles getListOfFiles(fullPath)
else:
if fullPath.endswith('jpg'):
allFiles.append(fullPath)
elif fullPath.endswith('jpeg'):
allFiles.append(fullPath)
elif fullPath.endswith('png'):
allFiles.append(fullPath)
return allFiles
@service
def slideshow():
import random
import os
import shutil
path = '/Slideshow'
listOfFiles = getListOfFiles(path)
random_image = random.choice([x for x in listOfFiles])
image_path = '{}'.format(random_image)
shutil.copy2(image_path, '/config/www/slide.jpg')
Теперь все работает, НО файл назначения (slide.jpg) никогда не бывает правильного размера. Он варьируется от 10 КБ до 1000 КБ, в то время как исходное изображение часто составляет 7-10 МБ.
Есть какие-нибудь предложения?
Запуск одного и того же кода (с разным источником и назначением, конечно) на Mac работает идеально.
Те же результаты при использовании .copyfile и .copy
Комментарии:
1. Может ли где-то происходить состояние гонки, когда выходной файл не полностью записан на диск к моменту его проверки? Я знаю, что хватаюсь за соломинку, но это странное поведение, которое пахнет проблемой задержки синхронизации. Дополнительные сведения, которые могут помочь в устранении неполадок: как/когда/где вы проверяете размер результатов? Имеет ли значение (глупый) сон, вставленный между копией и проверкой размера?
2. Я проверяю файловую станцию Synology, и скопированное изображение имеет уменьшенное разрешение. Если я должен что-то написать в коде, чтобы помочь в устранении неполадок, дайте мне знать. Это первый скрипт на python, который я написал для домашнего помощника
3. Интересно, что если изображение действительно с уменьшенным разрешением, это не случай коррупции. Однако для меня загадочно, что может уменьшить разрешение в коде, который вы показываете, однако!
4. Поэтому, много копаясь, я случайно обнаружил, что если веб-интерфейс для Synology (DSM) открыт в фоновом режиме, происходит такая ситуация. Если я закрою веб-интерфейс, изображение будет скопировано в правильном размере. Есть идеи по поводу того, почему, но что более важно, как это исправить?
5. Честно говоря, я понятия не имею. Я на самом деле не знаком с Synology, я анализирую ваш вопрос на основе кода, который вы опубликовали. Если мне придется рискнуть предположить, может быть, интерактивный веб-интерфейс обнаруживает, что был добавлен новый файл, и у него есть некоторые правила для его обработки? Что ясно, так это то, что код, который вы показываете, сам по себе не может быть причиной.
Ответ №1:
Итак, после долгих поисков проблема была найдена. Synology создает каталог: /@eaDir/
для каждого файла с миниатюрой в S, M, L, которая оказалась основной причиной. Это (иногда) был передаваемый файл, а не предполагаемое изображение, следовательно, меньший размер.