Terve
Tässä ajattelin koittaa, että miten saisin käännettyä PHP:n lailla tiedostoja serverillä. Kun mennää esimerkiksi osoitteeseen localhost/tiedosto.x niin tämä suoritettaisiin tulkin läpi. Jos tiedosto.x:ssä lukisi vaikka Print "Jee", niin ohjelma lukisi sen ja palauttaisi pelkän Jee-tekstin.
Olisiko CGI-oppaasta ja Antin vinkistä apua?
Eli, jos muutan AddHandler cgi-script-kohtaa siten, että sen perässä on .x, ja teen esimerkiksi tiedoston:
#! C:\tulkki\tulkki.exe print "Jee";
Tämän siis pitäisi toimia siten, että koodi ajetaan tulkki.exen läpi ja palauttaa sen mitä tulkki käskee tehdä?
Muokkaus. Joo kyllä se kai noin menee. En vaan millään halua tehdä sitä C++:lla... Olen aina sitä inhonnut. Voiko Python toimia siinä hommassa omalla serverilläni?
koodi.x kirjoitti:
couldn't create child process: 720003: print.math
Eli, tuli virhe. Tiedostossa koodi.x lukee näin
#!\tulkki.py print("Testitulostus")
tulkki.py tiedostossa taas lukee seuraava:
# -*- coding: utf-8 -*- def print(teksti): print teksti
En tiedä paljoa Pythonista, mutta eikö tuon printin perään pidä laittaa puolipiste?
ankzilla: ei.
Ongelmana taitaa nyt olla se, että tuo tulkki.py
ei toimi kuten tulkin pitäisi. Kokeile mitä taphtuu, jos annat sille komentoriviparametrina polun tiedostoon koodi.x
. Ei mitään (järkevää). Lisäksi tiedoston alusta puuttuu #!\polku\Python-tulkkiin
.
CGI:n idea: Tee ohjelma, joka tulostaa sopivat HTTP-otsikot ja niiden jälkeen tyhjän rivin sekä lopuksi nettisivun. Jos ohjelman suorittaminen vaatii tulkin (kuten Pythonin kohdalla), kirjoita tiedoston ensimmäiselle riville #!tulkin_polku.
Ohjelma voisi siis olla tällainen:
#!/usr/bin/python print "Content-Type: text/html; charset=UTF-8" print "" print "<!DOCTYPE html>" print "<html>" print "<head><title>Moi</title></head>" print "<body><h1>JEE!</h1></body>" print "</html>"
Tässä Python-tulkin polku on /usr/bin/python, kuten Linuxissa usein on. Windowsissa polku on toki jotain aivan muuta, esimerkiksi C:\python\python.exe.
Jep, nythän se toimii tuo Pythonilla tulostaminen. Entä jos haluan ottaa peliin oman tulkkini? Eli, Python toimii tulkkina (tulkki.py) ja tulkattava koodi (koodi.x) toimii omilla print sun muilla komennoilla.
Käyttääksesi omaa tulkkia sinun täytyy osata tehdä sellainen :)
Tuo mystinen ohjelman ensimmäinen rivi ei ole mikään include-komento vaan polku ohjelmaan, jonka oletetaan olevan kokonainen ohjelmointikielen tulkki - tässä tapauksessa käytännössä ohjelma, joka ottaa komentoriviparametrina tiedoston nimen ja suorittaa sen sisällä olevan lähdekoodin.
Oman ohjelmointikielen (tulkin) tekeminen on vaikeaa. Jos oma komentokielesi (tiedoston koodi.x
sisältö) koostuu kuitenkin vain omista Python-funktioista, niin homma kannattaa toteuttaa käyttäen ihan normaalia Python-moduulia siten, että koodin ajamiseen käytetään edelleen Python-tulkkia.
koodi.x
:
#!/usr/bin/python from OmatKomennot import * tulosta("Hello")
OmatKomennot.py
:
def tulosta( s ): print s
Vastaava toiminnallisuus on mahdollista toteuttaa myös siten, että koodi.x
-tiedoston ensimmäinen ja toisen rivin paikalla lukee vain #!\tulkki.py
, mutta tällä et varsinaisesti hämäisi ketään.
Kiitos. Mutta, tämä kyllä toimii funktio(...), mutta miten tulostusfunktion saisi kuten Pythonissa itsessään print "" tms?
Miksei se Pythonin print kelpaa?
Lähinnä ajattelin joitain muita funktioita...
Niin? Mitä funktioita? Voit käyttää niitä ihan normaaliin tapaan.
Ei ole olemassa mitään helppoa tapaa tehdä kielen syntaksiin mielivaltaisia muutoksia. Pythonissa funktiota kutsutaan aaltosulkujen kanssa. Erilaisia viritelmiä ja purkkauksia voi kyllä yrittää tehdä esimerkiksi oman "esikääntäjän" avulla. Se voisi olla yksinkertaisimmillaan ohjelma joka muuttaa osia lähdekoodista vaikka säännöllisten lausekkeiden määrittämällä tavalla. Tämä ei kuitenkaan ole missään määrin suositeltavaa tai järkevää.
Aihe on jo aika vanha, joten et voi enää vastata siihen.