У меня есть код, называемый программой обратного отсчета. Моя программа делает следующее:
Обратный отсчет от 60.
Воспроизведение звукового файла (alarm.wav
), когда обратный отсчет достигает нуля. Это означает, что код должен сделать следующее:
Пауза в течение одной секунды между отображением каждого номера в обратном отсчете путем вызова time.sleep()
.
Вызов subprocess.Popen()
для открытия звукового файла с приложением по умолчанию.
Вот код:
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'])
Когда я запускаю это, я получаю:
Error: File not Found
Я пытался с:
subprocess.call([ 'home/username/bomb.mp3']) # location specified
Но получил:
Error: Permission denied
Затем я пытался с Popen
:
subprocess.Popen(['start', 'bomb.mp3'], shell=True)
Но получил:
Error: 0123456789bomb.mp3: 1: start: not found
Я не совсем понимаю, почему этот код не работает на Ubuntu, потому что он отлично работает на Windows.
Что я могу сделать для этого? Есть ли способ открыть mp3-файлы с помощью Python на Ubuntu 20.04 LTS или я пропустил какой-либо аргумент?
Заранее спасибо.
Использование:
subprocess.call(['xdg-open', '/home/username/bomb.mp3'])
bomb.mp3
(или alarm.wav
) это не программа или скрипт, который вы хотите запустить, а файл, который вы хотите открыть. Поскольку ваша цель, по-видимому, состоит в том, чтобы открыть его в любом графическом приложении, которое в настоящее время зарегистрировано для его обработки — что, по крайней мере, одна из более ранних версий вашего скрипта делала при запуске в Windows — вы должны использовать xdg- открыть
команду.
Помимо использования xdg-open
, я также добавил ведущий /
в начало пути, без которого он разрешается относительно текущего каталога (что предположительно сбой, за исключением случаев, когда текущий каталог /
).
Первая версия вашей программы или что-то похожее на нее могла работать в Windows, потому что в Windows неисполняемые файлы можно запускать как команды. Это приводит к тому, что они открываются любой программой, с которой связан их тип файла. Большинство операционных систем и большинство оболочек ведут себя иначе.Windows также предоставляет для этого команду (с несколько иной семантикой), которая называется start
. Но другие операционные системы, такие как Ubuntu, не имеют start
. Поэтому, когда вы попробовали это в Ubuntu, это тоже не сработало.
У Ubuntu есть xdg-open
. Ubuntu здесь не одинок — xdg-open
не работает в Windows или macOS, но работает в системах с графическим окружением рабочего стола, соответствующих стандартам freedesktop.org. Сюда относится практически любая система GNU/Linux (и некоторые другие Unix-подобные операционные системы) , если у пользователя установлена графическая среда рабочего стола.
Чтобы команда xdg-open
была действительно успешной, пользователь должен войти в графический сеанс.
(В macOS вы должны использовать open
.)