Fórum Ubuntu CZ/SK

Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: Le_Ze 11 Srpna 2014, 09:26:43

Název: Jak spustit python skript přes PHP
Přispěvatel: Le_Ze 11 Srpna 2014, 09:26:43
Zdravím.
Jelikož v linuxu jsem úplný začátečník a s některých věcí mam hlavu jak meloun, chtěl bych poprosit, zda by se tu nenašla dobra duše, která by mi pomohla vyřešit tento problém.
Mam nainstalovaný Lighttpd servr a PHP
Dočet jsem se, že přes htm jde spustit python skrypt.
Tento problém řeší tady.
http://raspberrypi.stackexchange.com/questions/7365/php-to-execute-python-scripts-for-gpio
Je tam par rad, ale moc je nechápu.
Rad bych toto vyřešil i za předpokladu že bych měl odinstalovat Lighttpd a nainstalovat ten
SimpleHTTPServer  jak tam radí.
Pomůže někdo zkušeny?
Název: Re:Jak spustit python skrypt přes PHP
Přispěvatel: Mariocz 11 Srpna 2014, 09:46:19
zkus jestli ti php vůbec funguje.

V document rootu toho webserveru (nejspíš /var/www) vytvoř soubor info.php s následujícim obsahem
Citace
<?php phpinfo();
a v prohlížeči zkus http://localhost

když se ti zobrazí tabulka s informacemi o php serveru, server běží a je chyba ve scriptech nebo v právech souboru
Název: Re:Jak spustit python skrypt přes PHP
Přispěvatel: Le_Ze 11 Srpna 2014, 09:54:12
Běží.
PHP Version 5.4.4-14+deb7u12
Název: Re:Jak spustit python skrypt přes PHP
Přispěvatel: Mariocz 11 Srpna 2014, 10:18:49
A tak píše ti to nějakej error nebo co se s tím děje? Pošli sem ten php script který chceš spustit.
Název: Re:Jak spustit python skrypt přes PHP
Přispěvatel: ntz_reloaded 11 Srpna 2014, 10:20:21
to je spatne takhle ..

v tom skriptu musi byt

Kód: [Vybrat]
<?php
phpinfo
();
?>

musi byt ulozenej nekde v DocumentRoot treba jako info.php a musis ho dat samozrejme do te URL
Název: Re:Jak spustit python skrypt přes PHP
Přispěvatel: Le_Ze 11 Srpna 2014, 10:33:36
No i to co poradil Mariocz funguje a tabulka se vykreslí.
Bližší info abych vyloučil nějaký můj kopanec.
Jede to na systému raspbian.
Bud se přihlašují jako pi a používám sudo
Nebo se přihlašují jako root.

Zkoušel jsem python skript umístit přímo do var/www/
exec('sudo python /var/www/test.py');

Také jsem zkusil skript umístit do python /home/pi/

exec('sudo python /home/pi/test.py');

Tento htm je ořezané s té stránky.

Kód: [Vybrat]
<html>
<head>
<?php 
if (isset($_POST['RedON']))
{
exec('sudo python /home/pi/skript.py');
?>


  <title></title>
</head>
<body>
<form method="post">
  <table
 style="width: 75%; text-align: left; margin-left: auto; margin-right: auto;"
 border="0" cellpadding="2" cellspacing="2">
    <tbody>
      <tr>

  </tr>
  <tr>
    <td style="text-align: center;"><button name="RedON">Red On</button></td>
   
  </tr>
</tbody>
  </table>
</form>
</body>
</html>

Jinak žadnou chybu to nevyhazuje,jen se nic neděje.
Název: Re:Jak spustit python skript přes PHP
Přispěvatel: Petr Merlin Vaněček 11 Srpna 2014, 11:22:01
Že by tento konstrukt nevyhodil chybu se mi nezdá:
Kód: [Vybrat]
<?php 
if (isset($_POST['RedON']))
{
exec('sudo python /home/pi/skript.py');
?>


Chybí tam uzavření podmínky (}). Pokud je toto zdroj zobrazené stránky, pak bych tipl, že má příponu htm/html a tedy se server ani nepokouší nad tím spustit PHP interpert.

PS: V novějších verzích PHP je v defaultu zakázán výpis chyb - musí se explicitně povolit v php.ini, položka display_errors
PSS: fce exec může být v distru zakázána (a docela dobře vím, proč bych ji tak nechal ...)
Název: Re:Jak spustit python skript přes PHP
Přispěvatel: Mariocz 11 Srpna 2014, 11:32:52
ntz pravda, v url to má být.. u sebe to píšu jako index.php a teď jsem to chtěl udělat srozumitelně a nedomyslel to do konce :) Uzavírací značka php je nepovinná.

Le_Ze: Asi přímo napiš co se tím snažíš docílit protože je vidět že nevíš co děláš a zkoušíš kopírovat a spouštět co najdeš, pomůžeme ti pak líp.

script spustíš takhle, to okolo tam být vůbec nemusí

Kód: [Vybrat]
<?php
exec
('python /home/pi/skript.py');
?>

ovšem soubor musí být spustitelný a majitelem souboru musí být uživatel toho webserveru (u apache www-data)

ale spíš bych na to bejt tebou zapomněl jestli to neni životně důležitý protože se k výsledku bez větší pomoci stejně nedokopeš a jestli je ten stroj přístupný z venku tak si tam nasekáš ještě velký bezpečnostní díry.
Název: Re:Jak spustit python skript přes PHP
Přispěvatel: Le_Ze 11 Srpna 2014, 11:49:37
ale spíš bych na to bejt tebou zapomněl jestli to neni životně důležitý protože se k výsledku bez větší pomoci stejně nedokopeš a jestli je ten stroj přístupný z venku tak si tam nasekáš ještě velký bezpečnostní díry.

Tak toto je hodně duležite.
Bez toho mohu strčit Raspi do vitrínky  :-X :-X

Le_Ze: Asi přímo napiš co se tím snažíš docílit protože je vidět že nevíš co děláš a zkoušíš kopírovat a spouštět co najdeš, pomůžeme ti pak líp.

Tak jo no, s pravdou ven.
K rasperi se da připojít čip MCP23017 a pomocí knihovny WiringPi2 ovládat.
http://raspi.tv/2013/using-the-mcp23017-port-expander-with-wiringpi2-to-give-you-16-new-gpio-ports-part-3


Kód: [Vybrat]
#!/usr/bin/python
# -*- encoding: utf-8 -*-
import wiringpi2 as wiringpi 
from time import sleep 
     
pin_base = 65       # lowest available starting number is 65 
i2c_addr = 0x20     # A0, A1, A2 pins all wired to GND 
     
wiringpi.wiringPiSetup()                    # initialise wiringpi 
wiringpi.mcp23017Setup(pin_base,i2c_addr)   # set up the pins and i2c address 
     
     
wiringpi.pinMode(65,1)         #pin GPA 0 na výstup
wiringpi.digitalWrite(65,1)    #pin GPA 0 zapne
sleep(5)
wiringpi.digitalWrite(65,0)    #pin GPA 0 vypne

Když spustím tento skript
sudo python /home/pi/test.py

sepne mi to rele, které da impuls mechanismu pro otvíraní brany.
Fungovat to funguje dobře.
Jenže spouštět putty v mobilu a otvírat to přes ten příkaz je zdlouhavé.
Proto bych rad nějakou tu php stránku s gombikama, které by ten skript spouštěli

Jinak routr je zabespečen a za natem.
Na střeše mam wi-fi.
Když přijiždím k domu, tak se mobil připojí k te wi-fi.
Takže žadne bezpečnostní ryziko nehrozí
Název: Re:Jak spustit python skript přes PHP
Přispěvatel: jmp 11 Srpna 2014, 12:30:48
nebylo by pak lepší zpracovávat python přímo tím webserverem?
http://www.linuxsoft.cz/article.php?id_article=1644 (http://www.linuxsoft.cz/article.php?id_article=1644)
Název: Re:Jak spustit python skript přes PHP
Přispěvatel: Mariocz 11 Srpna 2014, 12:45:33
script přesuň do /var/www/scripts aby na něj webserver viděl a dej mu spustitelný příznak

Kód: [Vybrat]
cp /home/pi/test.py /var/www/scripts
chmod +x /var/www/scripts/test.py

pak v terminálu spusť
Kód: [Vybrat]
sudo visudo
a na konec přidej tenhle řádek - povolí pouštět ten příkaz se sudo bez zadání hesla pro uživatele lighttpd (na rychlo jsem pogooglil že default user je lighttpd ale jistej si nejsem)

Kód: [Vybrat]
lighttpd ALL=NOPASSWD: /var/www/scripts/test.py
do /var/www/ hoď soubor gate.php s obsahem
Kód: [Vybrat]
<?php
exec
('sudo python /var/www/scripts/test.py');
?>


v prohlížeči zkus adresu localhost/gate.php, skript by se měl provést
Název: Re:Jak spustit python skript přes PHP
Přispěvatel: Le_Ze 11 Srpna 2014, 13:08:08
dej mu spustitelný příznak

Kód: [Vybrat]
cp /home/pi/test.py /var/www/scripts
chmod +x /var/www/scripts/test.py
a na konec přidej tenhle řádek - povolí pouštět ten příkaz se sudo bez zadání hesla pro uživatele lighttpd (na rychlo jsem pogooglil že default user je lighttpd ale jistej si nejsem)
Kód: [Vybrat]
lighttpd ALL=NOPASSWD: /var/www/scripts/test.py

Toto nějak nechapu?
Název: Re:Jak spustit python skript přes PHP
Přispěvatel: Mariocz 11 Srpna 2014, 13:18:13
cp zkopíruje script do složky kam se webserver dostane a pak mu pomocí chmod nastavíš práva aby ho bylo možný spustit

vždyť to tam máš napsaný. Buď trochu konkrétní a napiš co nechápeš.
Název: Re:Jak spustit python skript přes PHP
Přispěvatel: Le_Ze 11 Srpna 2014, 13:20:42
cp zkopíruje script do složky kam se webserver dostane a pak mu pomocí chmod nastavíš práva na spuštění

Takže vše zadat do terminalu?

Kód: [Vybrat]
root@raspberrypi:~# lighttpd ALL=NOPASSWD: /var/www/scripts/test.py
2014-08-11 11:22:46: (server.c.617) No configuration available. Try using -f opt                        ion.
Název: Re:Jak spustit python skript přes PHP
Přispěvatel: Mariocz 11 Srpna 2014, 13:26:07
jo, první tři příkazy do terminálu, ve třetím jsem měl chybku a opravil ho. ten zadáš, otevře ti k editaci soubor sudoers, tam přidáš řádek který jsem napsal a CTRL+o uložíš, CTRL+x zavřeš.

pak vytvoř ten php soubor a vyzkoušej. Případný chyby a výpisy sem pak pošli
Název: Re:Jak spustit python skript přes PHP
Přispěvatel: ntz_reloaded 11 Srpna 2014, 13:29:03
doporucuji ohledat jine moznosti, nez to poustet se sudo .. nicmene pokud to se sudo poustis, tak udelej ten skript alespon aby ho vlastnil root s pravy 755
Název: Re:Jak spustit python skript přes PHP
Přispěvatel: Le_Ze 11 Srpna 2014, 13:57:47
Tak jsem udělal vše jak jste napsali a nic.
Přes FileZillu jdem vlez do Pi a nastavil souboru prava na 777.
Pak ho překopiroval.
cp /home/pi/test.py /var/www/scripts

Nevím zda mu ty prava 777 při kopirovaní zustanou?
Pak chmod +x /var/www/scripts/test.py
Pak  sudo visudo
A do něj jsem na konec vložil lighttpd ALL=NOPASSWD: /var/www/scripts/test.py a uložil.

No nefunguje to :-\
Název: Re:Jak spustit python skript přes PHP
Přispěvatel: ntz_reloaded 11 Srpna 2014, 13:59:16
Tak jsem udělal vše jak jste napsali a nic.
Přes FileZillu jdem vlez do Pi a nastavil souboru prava na 777.
Pak ho překopiroval.
cp /home/pi/test.py /var/www/scripts

Nevím zda mu ty prava 777 při kopirovaní zustanou?
Pak chmod +x /var/www/scripts/test.py
Pak  sudo visudo
A do něj jsem na konec vložil lighttpd ALL=NOPASSWD: /var/www/scripts/test.py a uložil.

No nefunguje to :-\
tak tos udelal uplne spatne s plnou ignoraci vseho co rikam .. uz me to nebavi ... delejte si to lidi jak chcete
Název: Re:Jak spustit python skript přes PHP
Přispěvatel: Le_Ze 11 Srpna 2014, 14:19:05
Co jsem posmolil?
Každy jednou začinal  :-\
Název: Re:Jak spustit python skript přes PHP
Přispěvatel: ntz_reloaded 11 Srpna 2014, 14:26:16
1) ty mas ohledat, jestli vubec potrebujes sudo na ten skript !! pokud ne, tak zadne editovani sudoers, mozna budes muset lighthttpd uzivatele pridat do nejake skupiny navic, aby mohl pristupovat k prislusnym /dev/xyz souborum asociovanym se Tvym fyzickym zarizenim

2) pokud to sudo opravdu potrebujes, tak jsem ti rekl, ze prava 777 proste ten skript nesmi mit !!!!! ma ho vlastnit root a ma mit 755 .. Nicmene pokud to spravne nastavis, tak na 99% zadne sudo nebudes potrebovat

3) pokud ten skript poustis pomoci ``exec('sudo python /var/www/scripts/test.py');'' a v sudoers mas ``lighttpd ALL=NOPASSWD: /var/www/scripts/test.py'' tak to taky nemuze fungovat, protoze to bys tam musel mit ``lighttpd ALL=NOPASSWD: python /var/www/scripts/test.py'' .. A to ani neresim, jestli to skutecne vubec bezi pod uzivatelem "lighthttpd"
Název: Re:Jak spustit python skript přes PHP
Přispěvatel: Le_Ze 11 Srpna 2014, 14:35:04
1) ty mas ohledat, jestli vubec potrebujes sudo na ten skript !! pokud ne, tak zadne editovani sudoers, mozna budes muset lighthttpd uzivatele pridat do nejake skupiny navic, aby mohl pristupovat k prislusnym /dev/xyz souborum asociovanym se Tvym fyzickym zarizenim
No mam odzkoušene že pokud se přihlasím jako PI tak sudo potřebují.
Pokud jako root, tak mi to jede bez sudo.

Název: Re:Jak spustit python skript přes PHP
Přispěvatel: Le_Ze 11 Srpna 2014, 15:43:04
Hm,budu hadat.
a) Skončila pracovní doba a všichni šli domu.
b) Vy--ali jste se na mně.
Asi B je spravně  :-X
Název: Re:Jak spustit python skript přes PHP
Přispěvatel: ntz_reloaded 11 Srpna 2014, 15:46:24
Hm,budu hadat.
a) Skončila pracovní doba a všichni šli domu.
b) Vy--ali jste se na mně.
Asi B je spravně  :-X

uz jsme ti napsali co mas udelat .. proste psat to porad dokola nikam nevede .. nevim, co by sis vic predstavoval
Název: Re:Jak spustit python skript přes PHP
Přispěvatel: Le_Ze 11 Srpna 2014, 15:56:39
Tak vyřešeno.