【发布时间】:2015-12-16 17:22:01
【问题描述】:
我正在尝试在 Raspberry Pi 上的 Apache 上编写 Python 脚本。我的脚本包含:
#!/usr/bin/env python3
print("Content-type: text/html\n\n")
print("<!DOCTYPE html>\n<head>")
# ... other code
try:
with picamera.PiCamera() as camera:
camera.capture('camera.jpg')
except Exception as error:
errorMsg = error
PiCamera 代码产生了错误(因为我正在将一些现有代码迁移到新的 Pi 并且尚未移动相机)。错误被捕获,但 Apache 仍然产生 500 错误。错误日志显示:
malformed header from script 'start.py': Bad header: * failed to open vchiq instanc
似乎 PiCamera 错误输出已通过管道传输到 Http 输出。这不是很好吗,因为我的第一个打印功能已经输出了两个空行?错误消息是否意味着 PiCamera 输出被解释为 Http 标头?如果有,为什么?
【问题讨论】:
-
如果在打印语句之后删除所有代码会怎样?
-
当
try块没有写出错误消息时脚本工作正常,即即使try块导致except块被执行,网页也按预期生成. “* failed to open vchiq instanc”是来自camera.capture行的错误消息,因为正在运行的进程不在组video中。当我将 www-data 添加到组视频时,不再出现 500 错误,即使由于我在 Pi 上没有摄像头而运行了 except 块,即 camera.capture 失败并被成功捕获。 -
如果您将任何内容打印到 stderr:
print('error', file=sys.stderr),它是否会产生 500 http 错误?如果是,那么redirectsys.stderr. -
奇怪,我添加了
print('error',file=sys.stderr),但没有 500 错误。虽然我已经解决了我的问题,但我仍然很困惑。
标签: python apache python-3.x raspberry-pi