#python
#python
Вопрос:
У меня есть мой скрипт на python, который выполняет mp3, когда текущее время совпадает со временем, указанным в текстовом файле. Однако все работает хорошо, но я замечаю задержку и задержку примерно на 18 секунд, прежде чем mplayer воспроизведет mp3-файл.
Есть ли способ улучшить мой скрипт на python, чтобы избавиться от задержки в 18 секунд и заставить mp3-файл воспроизводиться мгновенно?
Вот мой скрипт на python:
#!/usr/bin/python
# -*- coding: utf-8 -*-
# import libraries
import json
import urllib2
from bs4 import BeautifulSoup
import requests
import datetime
import playsound
import os
import subprocess
dateSTR = datetime.datetime.now().strftime('%H:%M')
f = open('/home/pi/test.txt','r')
messagetest = f.read()
newnametest = messagetest.replace("n","")
f.close()
if (dateSTR) == (newnametest):
os.system("mplayer -ao alsa:device=bluealsa /home/pi/test.mp3")
Комментарии:
1. Я не вижу никакого цикла в вашем коде, вы запускаете скрипт вручную?
Ответ №1:
Попробуйте запустить mplayer
подпроцесс до того, как он вам действительно понадобится как:
p = subprocess.Popen('mplayer -slave -idle -ao alsa:device=bluealsa', shell=True, stdin=subprocess.PIPE)
Это должно запуститься mplayer
и ждать, когда вам это понадобится. Затем, когда вы хотите воспроизвести файл, выполните:
p.communicate(input=b'loadfile /home/pi/test.mp3n')
Комментарии:
1. позвольте мне попробовать это
2. извините, это вообще не работает. Я пытался использовать ваш метод, но файл mp3 не воспроизводится вообще.
3. как вы думаете, мне нужно добавить ваш код в определенное место в моем скрипте python?
4. Вы должны добавить
Popen
как можно раньше в сценарий. Но как вы измеряете 18 секунд. Самаcrontab
система имеет значительные задержки.5. да, я уже добавлял Popen в начале моего скрипта
dateSTR = datetime.datetime.now().strftime('%H:%M')
. И я остановил crontab, иnohup
вместо этого я использовал, но забыл о 18-секундной задержке, когда mp3-файл вообще не воспроизводится
Ответ №2:
Я бы создал цикл, что-то вроде:
from time import sleep
from datetime import datetime
...
done = []
while 1:
dateSTR = datetime.now().strftime('%H:%M')
if (dateSTR) == (newnametest) and not dateSTR in done:
done.append(dateSTR)
os.system("mplayer -ao alsa:device=bluealsa /home/pi/test.mp3")
sleep(1)
Комментарии:
1. спасибо за ваш ответ, но не могли бы вы, пожалуйста, рассказать мне о цели цикла?
2. Я использую задание cron для выполнения скрипта
3. Проверьте, не запускает ли система другие cron в какой-то момент, что может вызывать задержку.
4. Мне было непонятно, как вы запускаете скрипт. Cronjob — правильный способ сделать это, но вы также можете использовать его в фоновом цикле, т. Е.:
nohup python /path/to/my/script.py amp;
5. Можете ли вы показать нам содержимое
/home/pi/test.txt
?