我正在尝试使用这个小代码片段来改变我的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)
发布于 2019-06-23 03:11:51
这对您来说应该很容易缩小范围,因为问题最终与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()切换而得到解决,尽管我不知道细节。
https://stackoverflow.com/questions/56718204
复制相似问题