2017-01-20 15 views
1

Недавно я сделал проект на моей малине, чтобы прочитать 4-байтовый сигнал, поступающий из протокола TCP/IP, и воспроизвести соответствующее видео в зависимости от сигнала (0001, 0002, 0101 или 0102) ,Управление omxplayer dbus перестает работать, когда проект экспортируется

У меня есть 2 проблемы с этим:

1- код работает прекрасно, когда выполняется вручную, но если я запускаю его на перезагрузку, используя хрон, код работает, но не работает должным образом.

2-код работает (вручную) на Pi I, закодировал его, но если я переношу файлы на другой Pis, мне это нужно, я получаю ТОЧНУЮ ту же ошибку (запускаю ее вручную), как если бы я запускал это через cron на 1-м Пи.

Ошибка выполнения, которую я упоминаю здесь, является следующей: Команда dbus не останавливает видео, она не отвечает.

Код находится в python 3, все малины имеют одинаковые параметры, я взял файлы так, как они были на первом Pi, и скопировал их на других.

мой файл хрон является

@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') 

Я знаю, что мой код не очень, но я совершенно новой для питона и малина, и я просто хочу, чтобы сделать он работает на данный момент, idc об оптимизации.

Я бы очень признателен, если вы, ребята, можете помочь.

ответ

0

Update: фига, я просто использовал os.system («killall omxplayer.bin»)

Немного жестокий, но работает отлично, и по крайней мере, я уверен, что у меня нет какого-либо оставшееся незаконченного процесса

 Смежные вопросы

  • Нет связанных вопросов^_^