- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
概述:
我有一个 Python 程序可以在朝九晚五之间控制运动传感器。该程序在 Raspberry Pi 上运行, 存储在带有 occidentals v2.1 的 SD 媒体上 Debian操作系统。该程序严重依赖 time.sleep 方法在下类时间休眠并在第二天早上 9 点恢复工作。如果传感器触发,它会自动通过网络摄像头拍摄一张小照片。
问题:
直到最近该程序运行良好,直到有一天早上有人触发了传感器并且 take_picture() 函数无法初始化/dev/video0。 udev 似乎没有将设备映射到/dev/video*,当我重新插入网络摄像头并使用“dmesg | tail”检查其状态时,我收到一个错误:
[36725.201116] EXT4-fs error (device mmcblk0p2): udev
在研究问题并得出文件系统损坏的结论后,我尝试在 SD 媒体上运行文件系统检查。许多错误在该过程中得到解决,但在重新安装 USB 网络摄像头后再次出现相同的 ext4-fs 错误消息。
修复尝试 #1
此时我重新安装了操作系统并重新运行了我的传感器 Python 程序;它工作了两天,发送图像,然后 sleep 。我假设一切正常,所以我关闭了设备以将传感器放在更集中的位置。
启动设备并从 SSH 运行 python
命令后连接,我收到此错误:
Traceback (most recent call last):
File "/usr/lib/python2.7/site.py", line 562, in <module>
main()
File "/usr/lib/python2.7/site.py", line 544, in main
known_paths = addusersitepackages(known_paths)
File "/usr/lib/python2.7/site.py", line 271, in addusersitepackages
user_site = getusersitepackages()
File "/usr/lib/python2.7/site.py", line 246, in getusersitepackages
user_base = getuserbase() # this will also set USER_BASE
File "/usr/lib/python2.7/site.py", line 235, in getuserbase
from sysconfig import get_config_var
ImportError: cannot import name get_config_var
在程序运行期间和我重新启动之后之间没有更改任何设置。我假设了最坏的情况并再次检查了 "dmesg | tail" 并收到了更多文件系统错误:
[36725.201116] EXT4-fs error (device mmcblk0p2): ext4_ext_check_inode:403: inode #21266: comm python: bad header/extent: invalid extent entries - magic f30a, entries 1, max 4(4), depth 0(0)
[36725.239030] EXT4-fs error (device mmcblk0p2): ext4_ext_check_inode:403: inode #21427: comm python: bad header/extent: too large eh_max - magic f30a, entries 1, max 516(4), depth 0(0)
在额外的文件系统检查和重启后,运行 python
:
[ 819.427780] EXT4-fs error (device mmcblk0p2): ext4_ext_check_inode:403: inode #21266: comm python: bad header/extent: invalid extent entries - magic f30a, entries 1, max 4(4), depth 0(0)
[ 819.470874] EXT4-fs error (device mmcblk0p2): ext4_ext_check_inode:403: inode #21427: comm python: bad header/extent: too large eh_max - magic f30a, entries 1, max 516(4), depth 0(0)
[ 819.570893] EXT4-fs error (device mmcblk0p2): ext4_xattr_block_get:232: inode #21265: comm python: bad block 128
此时我在想,这些错误的原因可能与我的程序核心有关,但本质上很简单,只在创建图片时写入磁盘。下面是罪魁祸首代码:
有潜在问题的代码:
def take_picture():
cam = pygame.camera.Camera("/dev/video0",(320,240)) #1280x960 max but slow
pygame.init()
cam.start()
print "Capturing Image..."
image_output = cam.get_image()
pygame.image.save(image_output,'img_' +str(get_timestamp)+'.jpg')
cam.stop()
# Activate PIR
def pir_init():
while True:
m = datetime.datetime.now().time().minute #loop through for current time
h = datetime.datetime.now().time().hour
d = datetime.datetime.today().weekday()
if d > 4:
print("Sleeping...")
print time_sleep
time_sleep = (((7 - d) * 3600) * 24) - (h * 3600) + (9 * 3600)
time.sleep(time_sleep)
elif h < 9:
print("Sleeping...")
time_sleep = (9 - h) * 3600
time.sleep(time_sleep)
elif h > 16:
print("Sleeping...")
time_sleep = ((24 - h) + 9) * 3600
time.sleep(time_sleep)
elif io.input(pir_pin):
print("PIR ALARM")
pygame.camera.init()
time.sleep(1.5)
take_picture()
send_gmail()
time.sleep(10) # Cooldown to prevent email spew
else:
print "Waiting..."
time.sleep(0.5) # Sleep and wait for movement
print m
print "Wait"
我在上面看到的唯一潜在问题可能是生成图片或长时间休眠。
可能导致这些重复的文件系统错误的原因是什么?
最佳答案
SD 卡在 Raspberry Pi 上损坏是很常见的,此代码不会直接导致此问题。
我认为代码会导致我看到的问题的唯一原因是它是否过于频繁地尝试写入 SD 卡,这不太可能并且很可能是由潜在问题引起的。可能是 SD 卡坏了,或者来自劣质批处理。
如果您只是将这些图片作为电子邮件发送,则可能是根本不将图片存储在硬盘上的替代方法。或者,您可以添加 USB 硬盘驱动器或内存棒并使用它来存储图片。
您还可以缓存图片并一次写出一对,而不是直接写出每一张,以减少 SD 卡上的负载。这就像在内存中存储比方说五张照片一样简单,一旦你拍了五张照片,就把它们写出来。
pictures = {}
pictures[get_timestamp] = image_output
然后,一旦达到总共五个条目,就循环遍历它们,使用键生成文件名,而值包含实际图片。然后,您将所有五个都保存在硬盘上。
如果您有 512 MB 版本,您可以增加内存中存储的图片数量,但请记住,如果发生电源故障,内存中的任何内容都会丢失。
关于Python 程序可能导致文件系统错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16369257/
这很可能是我的语法错误,因为我对在 C++ 中使用多个文件和结构(特别是将结构传递给函数)还很陌生。这是三个文件: 主要.cpp: #include #include #include #inc
我有 TypeScript NestJS 项目。 我需要验证传入的 DTO 到我的 API。它可以被描述为“创建项目”,其中我们有建筑类型(房屋、公寓、花园),并根据该类型我们需要定义: 房屋:楼层包
是否可以从可用于泛型参数的可能类型集中排除特定类型?如果是如何。 例如 Foo() : where T != bool 将意味着除了类型 bool 之外的任何类型。 编辑 为什么? 以下代码是我尝试强
我的 WebGL 体积光线转换应用程序即将完成。但是我发现了一个问题。我必须通过 2D 纹理模拟 3D 纹理。这不是问题。我正在用小切片创建一个巨大的纹理。巨大纹理的尺寸约为 4096x4096 像素
我正在处理的网页上显示了一个返回顶部按钮。当您向下滚动时,有时单击它时,它会跳到顶部,然后跳回您在页面上的位置,然后像预期的那样平滑滚动到顶部。请记住,它并不总是这样做。这只是一个滞后或故障问题还是我
我对此还很陌生,所以请耐心等待。 我有一个类,它具有三个属性:几个整数和一个用户定义对象的集合。 public class Response { public int num1 { get;
我正在制作一款平台游戏,让玩家每 30 毫秒跳跃一次,并向上添加少量的力。我想我应该使用多线程,因为我之前已经做过一些,而且看起来很简单。无论如何,我尝试了这个: public void jump()
是否可以从可能的类型集中排除特定类型,这些类型可以在泛型参数中使用?如果是这样的话。 例如 Foo() : where T != bool 表示除 bool 类型之外的任何类型。 编辑 为什么? 以下
我正在尝试在单个查询中实现内部和外部联接,我不确定我的做法是正确还是错误,因为我不太擅长查询。 就这样吧。 我有以下表格。 hrs_residentials hrs_residential_utili
关于 my website ,有一段代码可以向页面添加几个元素。这段代码不是我可以编辑的东西,而且我对它放置这些元素的位置不满意,因为它弄乱了我的一些布局。所以我想出了一个小的 jQuery 来将它们
一位客户希望我创建一个数据集,如下所示。我不知道这是否可能或合乎逻辑。 我有表parent: id name ------- ------- 1 parent1 2
这可能吗?google 好像没有这方面的资料.. 这样,如果用户在另一个网站上播放视频或歌曲,我的音量就会自动减小 最佳答案 不,这是不可能的。 如果可能的话,它必须是特定于浏览器的,但我不认为这种情
所以我正在尝试制作响应式页面。问题是为什么它归结为移动数据需要位于列表中。 我会用一些示例代码来解释 所以这可能是桌面上的输出 option1
当您将鼠标悬停在a 元素 上时,是否可以删除url? 这就是我的意思: 最佳答案 一种选择是使用一些 JavaScript。 删除 href=来自 的属性标签,取而代之的是 onclick=...
我已经考虑了几个小时,但我无法取得太大进展。它是这样的: You have an array of size n and q queries. Each query is of the form (l
我一直在尝试编写一个脚本来强化 android。我没有成功! 我正在通过模拟器运行一个 AVD,并且已经用我加载的 android shell 和 bash shell 试过了。正如您将在下面看到的那
Private Sub Workbook_Open() Dim WBname As String WBname = ThisWorkbook.name If Not InStr(WBname, "te
Spark 2.0.0-预览版 我们有一个应用程序使用了相当大的广播变量。我们在大型 EC2 实例上运行它,因此部署处于客户端模式。广播变量是一个巨大的 Map[String, Array[Strin
我正在尝试从此link中提取摘要。但是,我无法仅提取摘要的内容。到目前为止,这是我完成的工作: url <- "http://www.scielo.br/scielo.php?script=sci_a
我的主页中有一个iframe。 iframe页面中有一个modalpopup。因此,当显示modalpopup时,modalpopup的父级是iframe主体和主页父级主体。因此,覆盖层仅覆盖ifra
我是一名优秀的程序员,十分优秀!