Chcem vas poprosit o radu. Potreboval by som vystup z python skriptu dostat na web. Po zatlaceni tlacidla volam funkciu test(),ktora precita subor print.py. Precita ho uplne cely a text mi potom zobrazi alert. Lenze ja by som chcel ziskat z toho skriptu chcel dostat iba vystup a to Ahoj alebo hodnotu nejakej premennej,ak by tambola.
Tu je funkcia:
function test(){
var xhr = new XMLHttpRequest();
xhr.open("POST", "print.py", true);
xhr.onreadystatechange = function(){
if (xhr.readyState == 4 && xhr.status == 200){
alert("Je to tu: " + xhr.responseText);
}
};
xhr.send(null);
}
a tu je ten python skript:
#!/usr/bin/python
print "Ahoj"
prejdi na jquery, lepsia dokumentacia, menej balastu, ako mas ty (tiez som na to presiel) ...napr. si daj vyechovat pole , z pola pouzijes len to, co potrebujes ...
Nejsu pythonista, ale nemalo by to byť
Potrebuješ to poslať na štandartný výstup.
Ok. Dik.To jquery vyzera celkom zaujimavo. Idemto skusit
Som rád že zabralo.
On ten čistý JavaScript nieje zlý, podobá sa na zápis s C/Python, tak už podľa preferencií.
Ahoj, narazil som na problem s ktorym sa trapim cely den. Pomocou Jquery spustam python skript. Pokial je ten skript jednoduchy napr. ma funkciu Print, tak mi to bezproblemov funguje a printne mi na web to co chcem. Avsak python skript ktory ovlada LED na urcitom pine, nefunguje. Zistil som, ze pokial ho chcem spustit pod uzivatelom www-data tak sa nevykona pretoze python modul pristupuje na nejake systemove kniznice. Samozrejme prava na ten python skript som nastavil, ale nepomohlo. Neviem ako spravim, aby python skript Jquery spustal pod rootom.
A ako si nastavil tie prava? Setuid ti nebude fungovat. Normalne Unix distra ti to budu ignorovat ak sa nachadza #! interpreter. Takze si budes musiet napisat nejaky wrapper.
Nie som v Linuxe az tak zbehly, tak priznam sa, ze Ti moc nerozumiem. Aky wrapper ? Prava som nastavoval s chmod a tiez som skusil aj zmenit vlastnika a skupinu daneho pzthon skriptu na www-data. Tiez som pridal do sudousers www-data ALL=(ALL) NOPASSWD: ALL. Nic nepomohlo.
Klikaj na tlačítko odpovedať, je lepšie vidieť komu odpovedáš .)
Wrapper by sa dalo po slovensky povedať ako medzivrstva/obálka. Proste napíšeš si systémový program mimo webserver, ktorý bude mať práva pristupovať k hardvéru (tomu pinu). To si otestuj a pokiaľ to bude fungovať, tak tým skriptom na servere budeš volať ten program. Dúfam že je to takto zrozumiteľné.
Aha, asi rozumiem. Nieco podobne som asi uz skusal. Spravil som si PHP skritp, ktory som volal. Ten PHP skript mal v sebe exec('sudo /var/www/cgi-bin/test.py') a vtedy to fungovalo. Chcel som vsak ten PHP skript vynechat a spustat python skript priamo, pretoze urcite budem chciet z Jquery odovzdat pythonu nejake argumenty a budem ocakavat od neho nejaky vystup. Ked to spravim cez PHP, tak pravdepodobne vsetko toto budem musiet osetrit aj v tom PHP skripte.
hm, klikol som na odpovedat a nevidim moc rozdiel.
Na ľavo sú také jemné čiaročky ktoré ukazujú na ktorý príspevok reaguješ. Trochu je to vidno aj v odtieni pri čase príspevku. Je to prehľadnejšie ako plácať odpovede štýlom PHPBB.
Ten rozdiel určite vidíš odsadením zľava.
Musíš si spraviť "sydtémový" skript(program) ktorý bude obsluhovať hardvér a potom z Python skriptu ho volať s parametrami. Samozrejme ten skript na serveri môže dostať späť údaje z toho z toho systémového skriptu.
Buď chceš problém riešiť, alebo si stáť za svojim nefungujúcim riešením, ktoré obídeš len pokazením všetkých bezpečnostných postupov čo ti Linux poskytuje. Tak počítam že ďalší dotaz v poradni bude, "hocikto mi spúšťa ten skript na diaľku ako to zabezpečím"?
Mam este jednu otazku, ale nesuvisi az tak s touto temou. Pomocou jquery spustim python script, ktory rozsvieti LED, vrati mi hodnotu 1 (stav pinu) a ukoci sa. Ak vsak spustim skript na kontrolu stavu, tak mi vrati hodnotu 0 aj ked LED svieti. Asi je to sposobene tym, ze o rozvietenie sa postaral skript, ktory sa ukoncil a novy skript s tym nema nic spolocne. Ako sa toto da riesit ? Mna napadlo napr. pouzit databazu sqlite a vzdy do nej zapisat aktualny stav. Nasledne pri zistovani stavu pinu by skript cital z databazy.
jedna ti vratilo, ze ju zapol (tipujem, ze oba commandy boli zhodne) ... neviem, ako vyzera ten python prikaz, ale asi najlepsie je to riesit cez to volanie system('python ....');