首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >amixer:无效的命令

amixer:无效的命令
EN

Stack Overflow用户
提问于 2019-06-23 02:46:56
回答 1查看 289关注 0票数 1

我正在尝试使用这个小代码片段来改变我的RaspberryPi的音量:

代码语言:javascript
复制
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)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-23 03:11:51

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

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

代码语言:javascript
复制
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()切换而得到解决,尽管我不知道细节。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56718204

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档