我有一个Java程序,它使用帧抓取卡上的视频。这个程序是通过pythonlauncher.py启动的。在
阅读我发现的视频流的最简单的方法是让Java在一个命名管道上读取,这非常有效。所以我的疗程是:$ mkfifo videopipe
$ cat /dev/video1>videopipe
在第二个终端中(因为cat命令被阻塞):
^{pr2}$
我想自动化这个过程。不幸的是,结果总是一样的:Java应用程序启动(通过Java程序中的print语句确认),但是终端停止运行,没有出现异常或其他情况。在
由于这个过程是手动的,我想我在python程序中做了一些错误的事情。为了简化操作,我隔离了管道部分:from subprocess import call, Popen, PIPE, check_call
BASH_SWITCHTO_WINTV = ['v4l2-ctl', '-d /dev/video1', '-i 2', '--set-standard=4']
BASH_CREATE_FIFO_PIPE = ['mkfifo', 'videopipe']
BASH_PIPE_VIDEO = 'cat /dev/video1>videopipe'
def run():
try:
print('running bash commands...')
call(BASH_SWITCHTO_WINTV)
call(BASH_CREATE_FIFO_PIPE)
Popen(['cat', '/dev/video1'], stdout=open('videopipe', 'w'))
except:
raise RuntimeError('An error occured while piping the video')
if __name__ == '__main__':
run()
运行时输出:running bash commands...
Failed to open /dev/video1: No such file or directory
如果您能提供一点帮助,我们将不胜感激