2015-08-19 2 views
2

Я хочу знать, когда omxplayer начнет играть ссылку в реальном времени. Некоторое время это занимает 4-5 секунд несколько раз 6-7 секунд.Python общается с omxplayer

Когда я исполняю os.system('omxplayer '+url), я сразу получаю следующее сообщение:

no xset in (/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl) 
which: no xrefresh in (/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl) 

тогда, когда начинается живой поток (после 5-7 секунды), я получаю:

Video codec omx-h264 width 1280 height 720 profile 578 fps 25.000000 
Audio codec aac channels 2 samplerate 44100 bitspersample 16 
Subtitle count: 0, state: off, index: 1, delay: 0 
V:PortSettingsChanged: [email protected] interlace:0 deinterlace:0 anaglyph:0 par:1.00 layer:0 alpha:255 

Я пытаюсь для получения второго сообщения через подпроцесс. Но я никогда этого не понимаю. Как я могу получить второе сообщение или как узнать, когда omxplayer начнет работать?

Благодаря

#!/usr/bin/python2 

import sys, os, time 
from subprocess import PIPE, Popen 


url="http://livestreamlink.m3u8" 


def Main(): 
    proc=Popen(['omxplayer',url], stdout=PIPE) 
    time.sleep(5) 
    print proc.communicate()[0] 


if __name__ == "__main__": 
    Main() 
+0

вы хотите получать сообщения, а процесс все еще работает? Если вы запустите его в терминале как «omxplayer $ url | & cat'; Вы видите сообщения за 5-7 секунд (до выхода 'omxplayer')? См. [Python subprocess readlines() зависает] (http://stackoverflow.com/q/12419198/4279) – jfs

ответ

2

попробовать это:

proc=Popen(['omxplayer',url], stdout=PIPE, stderr=PIPE) 
print proc.communicate() # remove [0] 
+0

Я уже пытаюсь, но ничего не изменилось. Я не получил вторую часть сообщения терминала omxplayer. –

+0

см. Мой обновленный код. вам нужно прочитать документы для модуля подпроцесса, чтобы понять, как обрабатываются stdout и stderr – scytale