混合器:无效命令

时间:2019-06-22 18:46:56

标签: python raspberry-pi amixer

我正在尝试使用以下小代码段更改RaspberryPi的音量:

import os

def setVolume(vol,prefix):
    cmd = "amixer -q -M set PCM " + vol + "%"
    print(prefix+"Changing volume to " + vol + "%")
    print(prefix+str(os.system(cmd)))

我在两个不同的python脚本中使用此函数,但仅在其中一个脚本中起作用。 (此功能仅用于测试,请忽略前缀和填充)。 它仅在其中之一中起作用,并给出错误消息: 混音器:无效的命令! (Python 2.7.13)

1 个答案:

答案 0 :(得分:0)

这对您来说应该很容易缩小范围,因为问题最终与Python无关。您的python代码只是构造一个命令字符串,然后由操作系统执行。

首先,我建议打印或记录您正在执行的完整命令,以便您知道正在执行的系统调用。您的问题很可能与运行命令时有效的当前工作目录有关。因此,在致电您的实际cmd之前,我会先致电os.system("pwd")。这将显示您在运行命令时当前的工作目录。然后,这是代码的修改后的版本,建议您运行以进行故障排除:

def setVolume(vol,prefix):
    cmd = "amixer -q -M set PCM " + vol + "%"
    print(prefix+"Changing volume to " + vol + "%")
    os.system("cmd")
    print("Executing command: >" + cmd + "<")
    print(prefix+str(os.system(cmd)))

在其中放置'>'和'<'将确保您在命令中看到任何空格。通常,这样做会向您显示问题所在,因为您会在构造命令的方式中注意到一个问题。在您的情况下,vol参数是这里的有趣因素。

一旦您拥有传递给os.system()的确切命令,请尝试通过复制/粘贴在shell提示符下运行该命令。理想情况下,您可以在用于运行Python脚本的同一shell提示下执行此操作。在尝试运行命令之前,先将代码“ cd”插入您的代码所指示的目录,然后进行“ pwd”调用。这应该将问题方式与Python隔离开。希望您会看到匹配的通过/失败行为,并且可以在系统命令级别而不是代码中进行故障排除。只有完全了解系统调用的工作原理以及它的外观后,您才能返回Python。

如果这不能使您达到目标,我建议使用subprocess模块而不是os.system(),前提是您的RasPi版本的Python可用。我听说过去仅通过退出os.system()就可以解决问题,尽管我不知道细节。