1

我正在尝试使用这个小代码片段来更改我的 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 脚本中使用这个函数,但它只适用于其中一个。(此功能仅用于测试,请忽略前缀和内容)。它仅适用于其中一个,并给出错误消息: amixer: Invalid command!(Python 2.7.13)

4

1 回答 1

1

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

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

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(),尽管我不知道细节。

于 2019-06-22T19:11:50.517 回答