Цель моего приложения - управлять некоторыми светодиодами на моей встроенной цели по каналу Ethernet.Моя встроенная плата поддерживает веб-сервер lighttpd.С этого веб-сервера я могу без проблем запускать скрипты Python, которые читают на устройства на моей плате.Проблема возникает, когда я пытаюсь записать на эти устройства.Сервер lighttpd работает как группа "www".У пользователя root на моей доске нет пароля.Любая попытка заставить сервер lighttpd работать от имени root приводит к тому, что lighttpd вообще не запускается.Поэтому я создал C-программу, которая будет называться подпроцессом, повышенным до уровня root с помощью sudo из скрипта python.
моя C-программа, управляющая светодиодами:
int main(int argc, char* args[]){
string python_message = "";
bool quit = false;
while (!quit)
{
cin >> python_message;
if (python_message == "quit"){
quit = true;
}else if (python_message == "1"){
ledn(1,"1");
}else if (python_message == "2"){
ledn(1,"0");
}else {
cout << "Huh?" << endl;
}
}
return 0;
}
Python-скрипт, которыйв cgi-bin
import sys
import time
print "Blinking User LED Program"
import subprocess
proc = subprocess.Popen(["sudo","/usr/bin/slave"], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
print "1"
proc.stdin.write("1\n")
time.sleep(.5)
print "0"
proc.stdin.write("0\n")
time.sleep(.5)
Если я прокомментирую строки proc.stdin и proc.stdout, моя программа запускается и выдает мне все выходные данные оператора print.Когда эти строки появляются, я получаю 500 ошибок сервера.