我最近在我的树莓上做了一个项目来读取来自 TCP/IP 协议的 4 字节信号,并根据信号(0001、0002、0101 或 0102)播放足够的视频。
我有两个问题:
1-代码在手动执行时工作正常,但如果我在重新启动时使用 cron 启动它,代码正在运行,但无法正常工作。
2-代码在我编码的 Pi 上(手动)工作,但是如果我将文件传输到我需要它的其他 Pi,我会得到完全相同的错误(手动启动它),就像我通过 cron 启动它一样第一个 Pi。
我在这里提到的执行错误如下: dbus 命令不会停止视频,它没有响应。
代码在 python 3 中,所有覆盆子都具有完全相同的参数,我将文件与第一个 Pi 上的文件一样,并将它们复制到其他文件上。
我的 cron 文件是
@reboot python /home/v1_M.py &
我的代码是:
from time import sleep
import subprocess
import os
import socket
import sys
play_video1 = None
play_video2 = None
play_video3 = None
play_video4 = None
vid_block = 0
check = None
data = None
try:
while True:
subprocess.Popen(["nc -l 1024 -i 1 > /home/resultat.txt"], shell=True)#Listens to port 1024 and writes data in txt file
sleep(2)
a=open('/home/resultat.txt','r')
lines = a.readlines()
a.close()
if lines:
signal = lines[-1]#signal in bytes
data = signal[-4:]#converts signal to string
#print (signal)
subprocess.Popen(["> /home/resultat.txt"], shell=True)#Empties txt file
#print (data)
if data != check :
vid_block = 0
check = data
if data == '0101' and vid_block == 0 : # video 1
os.system('dbuscontrol.sh stop')
play_video1 = subprocess.Popen(['omxplayer -o hdmi -r --no-osd --aspect-mode fill /home/misano_iway_v3.mp4'],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
shell=True)
vid_block = 1
elif data == '0102' and vid_block == 0 : # video 2
os.system('dbuscontrol.sh stop')
play_video2 = subprocess.Popen(['omxplayer -o hdmi -r --no-osd --aspect-mode fill /home/indy_iway_v2.mp4'],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
shell=True)
vid_block = 1
elif data == '0001' and vid_block == 0: # Video logo
os.system('dbuscontrol stop')
play_video3 = subprocess.Popen(['omxplayer -r --no-osd --loop --aspect-mode fill /home/Logo.mp4'],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
shell=True)
vid_block = 1
elif data == '0002' and vid_block == 0: # Video logo
os.system('dbuscontrol.sh stop')
play_video4 = subprocess.Popen(['omxplayer -r --no-osd --loop --aspect-mode fill /home/Logo.mp4'],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
shell=True)
vid_block = 1
except KeyboardInterrupt:
print("Exit")
data = None
os.system('dbuscontrol.sh stop')
我知道我的代码并不漂亮,但我对 python 和 raspberry 还是很陌生,我只想让它暂时工作,关于优化的 idc。
如果你们能提供帮助,我将不胜感激。