我正在开发一个系统,一个Raspberry在PyQt GUI上播放一个PyQt视频(我认为PyQt比特不相关)(就像演员一样--人们以前也这么做过)。
而不是播放视频,PyQt程序挂起,视频不播放。下文将对这一过程作更详细的解释:
一个YouTube链接(例如:“https://www.youtube.com/watch?v=ciASlzZCQOU"”)通过POST请求发送到我的Python (运行在无头RPi上),该脚本应该使用以下命令在Raspberry上启动omxplayer:"omxplayer -o both --orientation 0 `youtube-dl -g -f best \"{}\"`".format(youtube_link)并在运行中的PyQt程序之上显示视频。如果我在shell中手动执行逗号(通过ssh和物理地),这是有效的。
整个过程由RPi上的以下代码块处理:
elif self.path.endswith("/playVideo"):
content_length = int(self.headers['Content-Length']) # <--- Gets the size of data
youtube_link = self.rfile.read(content_length).decode('utf-8')
print(youtube_link)
play_command = "omxplayer -o both --orientation 0 `youtube-dl -g -f best \"{}\"`".format(youtube_link)
print(play_command)
os.system(play_command)块所做的是解码POST数据,获取YouTube链接并在子subshell中执行带有链接的命令(使用os.system())。
这一区块的产出:
https://www.youtube.com/watch?v=ciASlzZCQOU
omxplayer -o both --orientation 0 `youtube-dl -g -f best "https://www.youtube.com/watch?v=ciASlzZCQOU"`几秒钟后导致主程序挂起。在没有发生任何事情之后,视频就不会播放了,我不得不强制Python进程退出。
我以前能做到这一点,但我似乎打破了它,我认为这是一个简单的问题,但我似乎看不到它。我尝试过使用subprocess.Popen()而不是os.system(),甚至创建了一个shell脚本来完成这个任务,但是似乎没有什么能解决这个问题。
任何帮助都将不胜感激。
发布于 2021-01-04 20:30:29
Mark在评论中的建议是解决方案:在命令后面添加一个&来解决问题--这与os.system关系不大。
https://stackoverflow.com/questions/65567794
复制相似问题