Riproduci un file mp3 usando Python
Ho questo codice chiamato CountDown Program. Quello che fa il mio programma è:
Conto alla rovescia da 60.
Riproduce un file audio (
alarm.wav) quando il conto alla rovescia raggiunge lo zero. Ciò significa che il codice deve eseguire le seguenti operazioni:Metti in pausa per un secondo tra la visualizzazione di ogni numero nel conto alla rovescia chiamando
time.sleep().Chiama
subprocess.Popen()per aprire il file audio con l'applicazione predefinita.
Ecco il codice per questo:
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'])
Quando lo eseguo ottengo:
Error: File not Found
Ho provato con:
subprocess.call([ 'home/username/bomb.mp3']) # location specified
Ma ho:
Error: Permission denied
Quindi, ho provato con Popen:
subprocess.Popen(['start', 'bomb.mp3'], shell=True)
Ma ho:
Error: 0123456789bomb.mp3: 1: start: not found
Non sono abbastanza sicuro del motivo per cui questo codice non funziona su Ubuntu, perché funziona bene su Windows.
Cosa posso fare per questo? Esiste un metodo per aprire i file mp3 utilizzando Python su Ubuntu 20.04 LTS o mi sto perdendo qualche argomento?
Grazie in anticipo.
Risposte
Uso:
subprocess.call(['xdg-open', '/home/username/bomb.mp3'])
bomb.mp3(o alarm.wav) non è un programma o uno script che desideri eseguire, ma un file che desideri aprire. Poiché il tuo obiettivo sembra essere quello di aprirlo in qualsiasi applicazione grafica sia attualmente registrata per gestirlo, che è quello che faceva almeno una delle versioni precedenti del tuo script quando eseguito in Windows, dovresti usare il xdg-opencomando.
Oltre a utilizzare xdg-open, ho anche aggiunto un'intestazione /all'inizio del percorso, senza la quale viene risolto rispetto alla directory corrente (che presumibilmente fallirebbe tranne quando la directory corrente è /).
La prima versione del programma, o qualcosa di simile, potrebbe aver funzionato su Windows perché, su Windows, i file non eseguibili possono essere eseguiti come comandi. Ciò fa sì che siano aperti con qualsiasi programma a cui è associato il tipo di file. La maggior parte dei sistemi operativi e la maggior parte delle shell non si comportano in questo modo. Windows fornisce anche un comando per eseguire questa operazione (con semantica leggermente diversa) chiamato start. Ma altri sistemi operativi, come Ubuntu, non ce l'hanno start. Quindi, quando l'hai provato su Ubuntu, non ha funzionato neanche.
Quello che ha Ubuntu è xdg-open. Ubuntu non è solo qui xdg-open: non funziona in Windows o macOS, ma funziona su sistemi con ambienti desktop grafici che seguono gli standard freedesktop.org . Questo include quasi tutti i sistemi GNU / Linux (e alcuni altri sistemi operativi simili a Unix) se l'utente ha installato un ambiente desktop grafico .
Affinché il xdg-opencomando riesca effettivamente , l'utente deve essere connesso a una sessione grafica.
(Su macOS, useresti open.)