【发布时间】:2021-10-31 17:47:18
【问题描述】:
设置:Synology 与 Docker 运行 Home-Assistant 与 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) 的大小永远不会正确。它在 10kB - 1000kB 之间变化,而原始图像通常在 7-10 MB 之间。
有什么建议吗?
在 Mac 上运行相同的代码(当然,具有不同的源和目标)效果很好。
使用 .copyfile 和 .copy 的结果相同
【问题讨论】:
-
会不会在某处发生争用情况,在您检查时输出文件尚未完全写入磁盘?我知道,我正在抓住稻草,但这是一种奇怪的行为,闻起来像同步延迟问题。可以帮助排除故障的额外细节:您如何/何时/在哪里检查结果的大小?在复制和大小检查之间插入(愚蠢的)睡眠会产生影响吗?
-
我正在检查 Synology File Station,并且复制的图像的分辨率降低了。如果我应该在代码中写入一些内容来帮助解决问题,请告诉我。这是我为 Home Assistant 编写的第一个 python 脚本
-
有趣的是,如果图像在降低的分辨率下是有效的,这不是损坏的情况。但是,对我来说,什么会降低您显示的代码的分辨率很神秘!
-
翻了很多遍,我无意中发现,如果 Synology (DSM) 的 Web 界面在后台打开,就会发生这种情况。如果我关闭 Web 界面,则会以正确的大小复制图像。关于为什么,但更重要的是,如何解决这个问题的任何想法?
-
坦率地说,我不知道。我实际上并不熟悉 Synology,我正在根据您发布的代码分析您的问题。如果我不得不冒险猜测,也许交互式 Web 界面正在检测添加了一个新文件并且有一些规则来处理它?很明显,您显示的代码本身不可能是原因。
标签: python docker synology home-assistant