这应该很容易让您缩小范围,因为问题最终与 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()
,尽管我不知道细节。