Это заданный вопрос от raspberrypi.stackexchange.com. В то время как я пытаюсь заставить что-то работать на python на малине pi, так как оно не связано с какой-либо спецификой pi-специфики, это было предложено кем-то, которого я отправляю здесь. Оригинальная запись - here.код возврата из 256 python
Я пытаюсь сделать веб-интерфейс, чтобы изменить дату в rapsberry пи, но я получаю код возврата 256.
В настоящее время, что у меня есть выглядит следующим образом:
веб-страница -> отправляет запрос Аякса питон скрипт проверки питона, какой тип команды (команду даты/времени в данном случае) и куски вместе строка выглядит как:
sudo date --set="20130901 20:10"
и сохраняет его в переменной commandString
. Затем python идет:
os.system(commandString)
и возвращаемое значение передается вплоть до веб-страницы ui, где оно распечатывается.
В настоящее время я также возвращаю значение commandString
в Интернете, чтобы проверить его, и все выглядит нормально.
Проблема в том, что каждый раз, когда я тестирую, я возвращаю 256 в качестве кода возврата ошибки. Дата на малине pi, конечно, не меняется, поскольку я вручную проверяю ее до и после.
Однако, если я вручную идти к питона на Raspberry Pi и попробовать:
commandString = 'sudo date --set="20130901 20:10"'
os.system(commandString)
Он работает без проблем. Если я попробую без sudo
, тогда я получу возвращаемое значение 256, поэтому я подумал, что это проблема с правами на исходный скрипт. Я попробовал this link, чтобы проверить права моего сценария, и, похоже, все в порядке? (os.geteuid()
is 0)
Если это важно, я использую lighttpd и fastcgi для запуска python с веб-сайта ui. Моя конфигурация 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
Хотя это, вероятно, не очень хорошая идея, чтобы положить в мой корневой пароль, как это, я попробовал и получил тот же результат: он работает, когда выполняется в терминале/оболочке и внутри интерпретатора python, но не через веб-интерфейс ui на python.
привет, попробовав первый метод (на самом деле не нужен вывод для этой части) теперь дает код ошибки 1. Из поиска я думаю, что это означает «Операция не разрешена»? – mitim
ОК. извините, чтобы опубликовать еще один комментарий сразу, но это действительно странно. Просто для удовольствия, я попробовал это без sudo (just date --set = ...) и изменил p.communicate на p.wait. Интересно, что я получаю код возврата 0 и, похоже, работает. O.o Любые идеи о том, почему добавление sudo (с и без пароля) дает код возврата 1, в то время как его отсутствие не позволяет ему пройти? (Внутри скрипта os.geteuid() всегда было 0). Я думаю, что мне нужно сделать перерыв, выключить мой пи, затем забрать его обратно позже, потому что это кажется очень случайным, почему он работает. = _ = – mitim
yup ... похоже, теперь это работает. используя подпроцесс вместо os.system и не используя 'sudo' с моей командой. – mitim