通过 Cron Job 播放音频

问题描述 投票:0回答:2

有谁知道为什么音频无法通过 cron 作业运行,即使它在通过命令行运行时运行得非常好。我有一个通过蓝牙扬声器播放音频的 python 脚本,当我在命令行(python helper.py)上运行它时,它播放得很好,但通过 cron 运行它似乎不起作用。

额外细节:

我正在连接到蓝牙扬声器的 Raspberry Pi 上执行此操作。 我有一个连接到树莓派的显示器(不是无头的,但这是最终目标)

这是我的音频测试代码

import pygame
from pygame import mixer


def playFile(filePath):
  pygame.mixer.init()
  pygame.mixer.music.load(filename)
  pygame.mixer.music.play()
  print('I am here')
  while pygame.mixer.music.get_busy():
    continue

playFile('/home/pi/AlarmClock/alarm2.ogg')

这包括我的音频播放函数的定义和实际的调用。

如果我可以提供更多信息来澄清这一点,请告诉我。

编辑1:

我已经考虑了一些建议并稍微修改了我的代码。

我的 crontab 现在如下所示

* * * * * /usr/bin/python /home/pi/AlarmClock/helper.py > /home/pi/AlarmClock/output.out

这只是将Python脚本的输出发送到文件output.out

helper.py 文件也更新了

import sys
import pygame
from pygame import mixer

#fp = open('/home/pi/AlarmClock/erurfile.txt', 'a')
#sys.stdout =  sys.stderr = fp

print('at the top')
# Playing media files
def playFile(fileName):
    pygame.mixer.init()
    pygame.mixer.music.load(fileName)
    pygame.mixer.music.play()
    print('in the method')
    while pygame.mixer.music.get_busy():
        continue

print('about to run method')
playFile('/home/pi/AlarmClock/alarm2.ogg')
print('finished running method')

编辑已解决!: 这另一个问题完全解决了这个问题。 音频无法在 Raspberry Pi 上使用 crontab 播放

python audio bluetooth cron raspberry-pi3
2个回答
1
投票

问题可能存在于很多地方,因此以下步骤应该有助于确定 ti 损坏的位置。

我将从创建一个 shell 脚本开始,从 cron 运行该脚本并检查它是否有效。 因此,创建一个名为

my_cron_job.sh
的文本文件,其中包含以下行:

#!/bin/sh
date >> /tmp/cron.log  2>> /tmp/cron.err

修改您的 cron 作业以运行

my_cron_job.sh
,每分钟您都应该在
/tmp/cron.log
文件中添加一个新行。
/tmp/cron.err
应为空。

下一个问题是“我们可以从 cron 运行 Python 脚本吗?”。 我不是 Python 人,所以我假设你有一个“HelloWorld.py”,其中包含以下内容:

print('Hello World')

我们现在需要从 cron 作业运行它,因此编辑

my_cron_job.sh
来阅读:

#!/bin/sh
python HelloWorld.py >> /tmp/cron.log 2>> /tmp/cron.err

当您检查

/tmp/cron.log
时,它现在应该每分钟都会出现“Hello World”。 如果情况并非如此,那么您需要找出原因,这可能是环境问题。 如果您需要添加到环境中,例如修改 PATH,然后在
python
命令之前执行此操作。

你可能有这样的想法:

#!/bin/sh
PATH=$PATH:/usr/local/bin
python HelloWorld.py >> /tmp/cron.log 2>> /tmp/cron.err

如果您可以让

HelloWorld.py
运行,那么您应该能够让您的音乐播放器运行。

其他一些注意事项:

  • Cron 通常会通过电子邮件将命令的输出发送给您,这应该会有所帮助。 您可能需要在 Pi 上安装一个简单的文本邮件客户端才能实现这一点(我很老派,所以喜欢 mailx)。
  • 如前所述,我不懂Python,但程序的结尾看起来像它处于一个紧密的循环中,等待
    get_busy()
    为假。 至少我会在这里插入某种形式的睡眠,或者寻找更好的方法。

祝你好运。


0
投票

我刚刚遇到了类似的问题,我的程序使用pygame在我的pi上输出音频,pi设置为将音频发送到HDMI端口。 通过 Geany 运行或通过控制台启动时工作正常,但使用 cron 启动时没有声音。 结果发现系统运行正常,但将音频信号发送到音频端口,忽略了我的 pi 上的设置。 我花了一段时间才找到那个!

© www.soinside.com 2019 - 2024. All rights reserved.