繁体   English   中英

v4l2文档的示例代码是原样的(以'rw'打开)?

[英]v4l2 documentation's sample code as is (with open as 'rw')?

我刚刚开始在Ubuntu 16.04.上使用v4l2 (适用于Python 3Ubuntu 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.运行,我也会遇到相同的错误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权限的文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM