python - v4l2 文档的示例代码原样(打开为 'rw' )?

标签 python python-3.x ubuntu ubuntu-16.04 v4l2

我刚开始使用v4l2 (对于 Python 3 )在 Ubuntu 16.04.

我正在尝试从 v4l2 Python 文档中运行示例,即:

$ cat demo4SO.py
#!/usr/bin/env python3

import v4l2
import fcntl

vd = open('/dev/video0', 'rw')
#vd = open('/dev/video0', 'r')
cp = v4l2.v4l2_capability()
fcntl.ioctl(vd, v4l2.VIDIOC_QUERYCAP, cp)

print("driver:",cp.driver)
print("card:",cp.card)

但我得到:
$ python3 demo4SO.py
Traceback (most recent call last):
  File "demo4SO.py", line 6, in <module>
    vd = open('/dev/video0', 'rw')
ValueError: must have exactly one of create/read/write/append mode

即使使用 sudo. 运行,我也会遇到相同的错误

尝试使用“w+”(或“r+”)打开,我得到:
$ python3 demo4SO.py
Traceback (most recent call last):
  File "demo4SO.py", line 8, in <module>
    vd = open('/dev/video0', "w+")
io.UnsupportedOperation: File or stream is not seekable.

如果我将“rw”(或“w+”或“r+”)更改为“r”,代码将按预期工作。
$ cat demo4SO.py
#!/usr/bin/env python3

import v4l2
import fcntl

#vd = open('/dev/video0', 'rw')
vd = open('/dev/video0', 'r')
cp = v4l2.v4l2_capability()
fcntl.ioctl(vd, v4l2.VIDIOC_QUERYCAP, cp)

print("driver:",cp.driver)
print("card:",cp.card)


$ python3 demo4SO.py
driver: b'uvcvideo'
card: b'Intel(R) RealSense(TM) 410'

我的用户名属于视频设备的组,所以问题似乎与权限无关:
$ groups
openstack root sudo video staff
$ ls -ls /dev/video0
0 crw-rw----+ 1 root video 81, 0 פבר 14 11:31 /dev/video0

知道为什么我不能按原样运行文档的示例代码(使用“rw”)吗?

最佳答案

改变

vd = open('/dev/video0', 'rw')


vd = open('/dev/video0', 'rb+', buffering=0)

启用以 O_RDWR 权限打开文件。

关于python - v4l2 文档的示例代码原样(打开为 'rw' )?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42225362/

相关文章:

php - 如何通过ssh远程运行MySQL脚本文件?

Ubuntu 上的 Swift 系统版本检查

python - 为什么 numpy.prod() 对于我的一长串自然数错误地返回负结果或 0?

python - 更改 Kivy 小部件部分文本的颜色

python - 在 python 中是否有类似 .replace() 的方法?

python-3.x - Pandas dataframe if else 条件基于前几行

python - Python 3 字典没有 has_key() 方法

python - 使用 Python 进行多元多项式回归

python - 在训练中使用 One-Hot-Encoding 后获得数据点的正确形状以使用回归模型进行预测

ruby - 如何全局使用单用户的 RVM 安装?