Это повторно размещенный вопрос от raspberrypi.stackexchange.com. Хотя я пытаюсь заставить что-то работать на python на raspberry pi, поскольку это не связано с какими-либо специфическими для pi вещами, это было предложено кем-то, кого я публикую здесь. Исходное сообщение находится здесь.
Я пытаюсь создать веб-интерфейс для изменения даты в rapsberry pi, но я продолжаю получать код возврата 256.
В настоящее время то, что у меня есть, выглядит следующим образом:
веб-страница -> отправляет запрос ajax в скрипт python. python проверяет, какой тип команды (в данном случае это команда времени/даты), и объединяет строку, выглядящую следующим образом:
sudo date --set="20130901 20:10"
и сохраняет его в переменной commandString
. Затем идет питон:
os.system(commandString)
и возвращаемое значение передается вплоть до веб-интерфейса, где оно распечатывается.
Я также в настоящее время возвращаю значение commandString
в веб-интерфейс, чтобы проверить его, и все выглядит нормально.
Проблема в том, что каждый раз, когда я тестирую, я продолжаю возвращать 256 в качестве кода возврата ошибки. Дата на raspberry pi, конечно же, не меняется, так как я вручную проверяю ее до и после.
Однако, если я вручную войду в python на raspberry pi и попробую:
commandString = 'sudo date --set="20130901 20:10"'
os.system(commandString)
Работает без проблем. Если я попробую это без sudo
, то я также получу возвращаемое значение 256, поэтому я подумал, что, возможно, это проблема с правами доступа к моему исходному скрипту. Я попробовал эта ссылка, чтобы проверить права доступа к моему скрипту, и все в порядке? (os.geteuid()
равно 0)
Если это имеет значение, я использую lighttpd и fastcgi для запуска python из веб-интерфейса. Моя конфигурация lighttpd в настоящее время:
fastcgi.server = (
".py" => (
"python-fcgi" => (
"socket" => "/tmp/fastcgi.python.socket",
"bin-path" => "/var/www/command.py",
"check-local" => "disable",
"max-procs" => 1)
)
)
Любые идеи о том, что мне не хватает?
В исходном сообщении также было предложено попробовать что-то вроде:
echo <password> | sudo -S date --set="20130829 02:02
Хотя, вероятно, не стоит вводить мой пароль root таким образом, я попробовал и получил тот же результат: он работает при выполнении в терминале/оболочке и в интерпретаторе python, но не через веб-интерфейс для python.