amixer: неверная команда - PullRequest
0 голосов
/ 22 июня 2019

Я пытаюсь изменить громкость моего 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)

1 Ответ

0 голосов
/ 22 июня 2019

Это должно быть очень легко для вас, так как проблема в конечном счете имеет мало общего с 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)))

Помещая '>' и '<', вы убедитесь, что вы видите все пробелы в вашей команде. Часто, просто делая это, вы увидите, в чем ваша проблема, так как вы заметите проблему в том, как вы создали свою команду. В вашем случае интересным фактором будет <code>vol параметр.

Как только у вас будет точная команда, которую вы передаете os.system(), попробуйте запустить эту команду в командной строке через копирование / вставку. В идеале вы можете сделать это в том же приглашении оболочки, которое вы использовали для запуска скрипта Python. «cd» в каталог, указанный вашим кодом, перед вызовом команды вызовите «pwd». Это должно изолировать проблему от Python. Надеемся, что вы увидите подходящее поведение «годен / негоден», и вы можете устранить неполадки на уровне системной команды, а не в вашем коде. Только когда вы полностью поймете, как работает системный вызов и как он должен выглядеть, вы вернетесь в Python.

Если это не приведет вас к цели, я бы предложил использовать модуль subprocess вместо os.system(), предполагая, что он доступен в вашей версии Python для RasPi. Я слышал о проблемах, которые решались в прошлом, просто переключаясь с os.system(), хотя я не знаю деталей.

...