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