Odtwórz plik mp3 za pomocą języka Python
Mam ten kod o nazwie CountDown Program. To, co robi mój program:
Odliczaj od 60.
Odtwórz plik dźwiękowy (
alarm.wav), gdy odliczanie dojdzie do zera. Oznacza to, że kod musi wykonywać następujące czynności:Zatrzymaj się na jedną sekundę między wyświetlaniem każdego numeru w odliczaniu, dzwoniąc
time.sleep().Zadzwoń,
subprocess.Popen()aby otworzyć plik dźwiękowy w domyślnej aplikacji.
Oto kod:
import time , subprocess,os
from subprocess import call
def countDown():
for i in range (10):
print(i, end='')
time.sleep(1)
countDown()
subprocess.call([ 'bomb.mp3'])
Kiedy to uruchomię, otrzymuję:
Error: File not Found
Próbowałem z:
subprocess.call([ 'home/username/bomb.mp3']) # location specified
Ale dostałem:
Error: Permission denied
Następnie spróbowałem z Popen:
subprocess.Popen(['start', 'bomb.mp3'], shell=True)
Ale dostałem:
Error: 0123456789bomb.mp3: 1: start: not found
Nie jestem do końca pewien, dlaczego ten kod nie działa na Ubuntu, ponieważ działa dobrze w systemie Windows.
Co mogę z tym zrobić? Czy jest jakaś metoda otwierania plików mp3 za pomocą Pythona na Ubuntu 20.04 LTS, czy brakuje mi jakiegokolwiek argumentu?
Z góry dziękuję.
Odpowiedzi
Posługiwać się:
subprocess.call(['xdg-open', '/home/username/bomb.mp3'])
bomb.mp3(lub alarm.wav) nie jest programem ani skryptem, który chcesz uruchomić, ale plikiem, który chcesz otworzyć. Ponieważ wydaje się, że Twoim celem jest otwarcie go w dowolnej aplikacji graficznej, która jest obecnie zarejestrowana do obsługi tego - co przynajmniej jedna z wcześniejszych wersji twojego skryptu robiła po uruchomieniu w systemie Windows - powinieneś użyć xdg-openpolecenia.
Oprócz używania xdg-open, dodałem również początek /ścieżki na początku ścieżki, bez którego jest rozwiązywany względem bieżącego katalogu (co prawdopodobnie zakończy się niepowodzeniem, z wyjątkiem sytuacji, gdy bieżący katalog jest /).
Pierwsza wersja programu lub coś podobnego mogło działać w systemie Windows, ponieważ w systemie Windows pliki niewykonywalne można uruchamiać jako polecenia. Powoduje to, że są one otwierane za pomocą dowolnego programu, z którym skojarzony jest ich typ pliku. Większość systemów operacyjnych i większość powłok nie zachowuje się w ten sposób. System Windows udostępnia również polecenie umożliwiające wykonanie tej czynności (z nieco inną semantyką) o nazwie start. Ale inne systemy operacyjne, takie jak Ubuntu, nie mają start. Więc kiedy wypróbowałeś to na Ubuntu, to też nie zadziałało.
To, co ma Ubuntu, to xdg-open. Ubuntu nie jest tutaj sam - xdg-opennie działa w systemie Windows ani macOS, ale działa w systemach ze środowiskami graficznymi, które są zgodne ze standardami freedesktop.org . Obejmuje to prawie każdy system GNU / Linux (i niektóre inne systemy operacyjne podobne do Uniksa), jeśli użytkownik ma zainstalowane środowisko graficzne .
Aby xdg-openpolecenie faktycznie się powiodło , użytkownik musi być zalogowany do sesji graficznej.
(Na macOS byś użył open.)