我有一个名为 CountDown Program 的代码。我的程序的作用是:
从 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 上运行良好。
我能做什么? 有没有方法可以在 Ubuntu 20.04 LTS 上使用 Python 打开 mp3 文件,还是我遗漏了任何参数?
提前致谢。
答案1
使用:
subprocess.call(['xdg-open', '/home/username/bomb.mp3'])
bomb.mp3
(或alarm.wav
)不是您要运行的程序或脚本,而是您要打开的文件。由于您的目标似乎是在当前注册的任何图形应用程序中打开它(这至少是您的脚本的早期版本在 Windows 中运行时所做的),因此您应该使用xdg-open
命令。
除了使用 之外xdg-open
,我还在/
路径前面添加了一个前导,如果没有它,路径将相对于当前目录进行解析(除非当前目录是 ,否则可能会失败/
)。
您的程序的第一个版本或类似版本可能在 Windows 上运行良好,因为在 Windows 上,非可执行文件可以作为命令运行。这使得它们可以用与其文件类型关联的任何程序打开。大多数操作系统以及大多数贝壳不要这样做。Windows 还提供了一个用于执行此操作的命令(语义略有不同),称为start
。但其他操作系统(例如 Ubuntu)没有start
。因此,当您在 Ubuntu 上尝试时,它也不起作用。
Ubuntu 拥有的是xdg-open
。Ubuntu 并不是唯一一个——它xdg-open
无法在 Windows 或 macOS 上运行,但它可以在遵循以下规范的图形桌面环境的系统上运行免费桌面网站标准。这包括几乎所有的 GNU/Linux 系统(以及一些其他类 Unix 操作系统)如果用户安装了图形桌面环境。
对于xdg-open
命令实际上成功,用户必须登录到图形会话。
(在 macOS 上,您可以使用open
。)