2017-01-20 25 views
1

TCP/IPプロトコルからの4バイトの信号を読み込み、信号(0001、0002、0101または0102)に応じて適切なビデオを再生するために最近ラズベリーのプロジェクトを作成しました。 。omxplayer dbusコントロールがプロジェクトのエクスポート時に動作を停止する

私はそれで問題を抱えて2:

1-手動で実行時にコードが正常に動作しますが、私はcronのを使用して、再起動時に、それを起動した場合、コードが実行されているが、正常に動作していません。

2コードはPiでコーディングされていますが、他のPisにファイルを転送しても、手動で起動すると同じエラーが表示されますそれは第1のPiのcronを通って。

ここで言及している実行エラーは次のとおりです。 dbusコマンドはビデオを停止しませんが応答しません。

コードはpython 3で、すべてのラズベリーは全く同じパラメータを持っています。ファイルを1 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とラズベリーに非常に新たなんだと私はちょうど作りたいですそれは今、最適化についてのidcのために働く。

お手数ですが本当にありがとうございます。

答えて

0

更新:ネヴァーマインド、私だけで使用os.system(「killallをomxplayer.bin」)

ビット残忍なく、正常に動作し、少なくとも私は私が残って閉じていないプロセスを持っていないかなり確信している

関連する問題