Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: Jak spustit python skript přes PHP  (Přečteno 9654 krát)

Le_Ze

  • Návštěvník
  • Příspěvků: 93
Jak spustit python skript přes PHP
« kdy: 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?
« Poslední změna: 11 Srpna 2014, 11:15:05 od Le_Ze »

Mariocz

  • Aktivní člen
  • *
  • Příspěvků: 148
Re:Jak spustit python skrypt přes PHP
« Odpověď #1 kdy: 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

Le_Ze

  • Návštěvník
  • Příspěvků: 93
Re:Jak spustit python skrypt přes PHP
« Odpověď #2 kdy: 11 Srpna 2014, 09:54:12 »
Běží.
PHP Version 5.4.4-14+deb7u12

Mariocz

  • Aktivní člen
  • *
  • Příspěvků: 148
Re:Jak spustit python skrypt přes PHP
« Odpověď #3 kdy: 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.

ntz_reloaded

  • Lokaj
  • Závislák
  • ***
  • Příspěvků: 3735
  • skill :: ur home erly
Re:Jak spustit python skrypt přes PHP
« Odpověď #4 kdy: 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
tikejte mi, taky Vam tikam ...
song of the day - openSUSE, openindiana, DuckDuckGo
The noise ain't noise anymore, who's to blame, WHO'S TO BLAME ??

Le_Ze

  • Návštěvník
  • Příspěvků: 93
Re:Jak spustit python skrypt přes PHP
« Odpověď #5 kdy: 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.
« Poslední změna: 11 Srpna 2014, 10:35:07 od Le_Ze »

Petr Merlin Vaněček

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 5057
    • Lomítkáři
Re:Jak spustit python skript přes PHP
« Odpověď #6 kdy: 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 ...)
Stiskni CTRL + W ...
80% mozku tvoří kapalina ... u některých brzdová

Mariocz

  • Aktivní člen
  • *
  • Příspěvků: 148
Re:Jak spustit python skript přes PHP
« Odpověď #7 kdy: 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.

Le_Ze

  • Návštěvník
  • Příspěvků: 93
Re:Jak spustit python skript přes PHP
« Odpověď #8 kdy: 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í
« Poslední změna: 11 Srpna 2014, 12:24:44 od Le_Ze »

jmp

  • Host
Re:Jak spustit python skript přes PHP
« Odpověď #9 kdy: 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

Mariocz

  • Aktivní člen
  • *
  • Příspěvků: 148
Re:Jak spustit python skript přes PHP
« Odpověď #10 kdy: 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
« Poslední změna: 11 Srpna 2014, 13:24:06 od Mariocz »

Le_Ze

  • Návštěvník
  • Příspěvků: 93
Re:Jak spustit python skript přes PHP
« Odpověď #11 kdy: 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?
« Poslední změna: 11 Srpna 2014, 13:18:11 od Le_Ze »

Mariocz

  • Aktivní člen
  • *
  • Příspěvků: 148
Re:Jak spustit python skript přes PHP
« Odpověď #12 kdy: 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š.
« Poslední změna: 11 Srpna 2014, 13:20:28 od Mariocz »

Le_Ze

  • Návštěvník
  • Příspěvků: 93
Re:Jak spustit python skript přes PHP
« Odpověď #13 kdy: 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.
« Poslední změna: 11 Srpna 2014, 13:26:22 od Le_Ze »

Mariocz

  • Aktivní člen
  • *
  • Příspěvků: 148
Re:Jak spustit python skript přes PHP
« Odpověď #14 kdy: 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

ntz_reloaded

  • Lokaj
  • Závislák
  • ***
  • Příspěvků: 3735
  • skill :: ur home erly
Re:Jak spustit python skript přes PHP
« Odpověď #15 kdy: 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
tikejte mi, taky Vam tikam ...
song of the day - openSUSE, openindiana, DuckDuckGo
The noise ain't noise anymore, who's to blame, WHO'S TO BLAME ??

Le_Ze

  • Návštěvník
  • Příspěvků: 93
Re:Jak spustit python skript přes PHP
« Odpověď #16 kdy: 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 :-\

ntz_reloaded

  • Lokaj
  • Závislák
  • ***
  • Příspěvků: 3735
  • skill :: ur home erly
Re:Jak spustit python skript přes PHP
« Odpověď #17 kdy: 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
tikejte mi, taky Vam tikam ...
song of the day - openSUSE, openindiana, DuckDuckGo
The noise ain't noise anymore, who's to blame, WHO'S TO BLAME ??

Le_Ze

  • Návštěvník
  • Příspěvků: 93
Re:Jak spustit python skript přes PHP
« Odpověď #18 kdy: 11 Srpna 2014, 14:19:05 »
Co jsem posmolil?
Každy jednou začinal  :-\

ntz_reloaded

  • Lokaj
  • Závislák
  • ***
  • Příspěvků: 3735
  • skill :: ur home erly
Re:Jak spustit python skript přes PHP
« Odpověď #19 kdy: 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"
tikejte mi, taky Vam tikam ...
song of the day - openSUSE, openindiana, DuckDuckGo
The noise ain't noise anymore, who's to blame, WHO'S TO BLAME ??

Le_Ze

  • Návštěvník
  • Příspěvků: 93
Re:Jak spustit python skript přes PHP
« Odpověď #20 kdy: 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.


Le_Ze

  • Návštěvník
  • Příspěvků: 93
Re:Jak spustit python skript přes PHP
« Odpověď #21 kdy: 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

ntz_reloaded

  • Lokaj
  • Závislák
  • ***
  • Příspěvků: 3735
  • skill :: ur home erly
Re:Jak spustit python skript přes PHP
« Odpověď #22 kdy: 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
tikejte mi, taky Vam tikam ...
song of the day - openSUSE, openindiana, DuckDuckGo
The noise ain't noise anymore, who's to blame, WHO'S TO BLAME ??

Le_Ze

  • Návštěvník
  • Příspěvků: 93
Re:Jak spustit python skript přes PHP
« Odpověď #23 kdy: 11 Srpna 2014, 15:56:39 »
Tak vyřešeno.
« Poslední změna: 14 Srpna 2014, 18:07:46 od Le_Ze »

 

Provoz zaštiťuje spolek OpenAlt.