Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Serverillä *.x kääntäminen

Sivun loppuun

Macro [21.12.2009 13:04:27]

#

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.

Metabolix [21.12.2009 13:15:51]

#

Olisiko CGI-oppaasta ja Antin vinkistä apua?

Macro [21.12.2009 13:26:01]

#

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?

Macro [21.12.2009 14:51:25]

#

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

ankzilla [21.12.2009 15:22:31]

#

En tiedä paljoa Pythonista, mutta eikö tuon printin perään pidä laittaa puolipiste?

os [21.12.2009 15:29:37]

#

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.

Metabolix [21.12.2009 15:50:23]

#

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.

Macro [21.12.2009 16:01:57]

#

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.

os [21.12.2009 18:48:22]

#

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.

Macro [21.12.2009 19:28:09]

#

Kiitos. Mutta, tämä kyllä toimii funktio(...), mutta miten tulostusfunktion saisi kuten Pythonissa itsessään print "" tms?

Metabolix [21.12.2009 19:38:53]

#

Miksei se Pythonin print kelpaa?

Macro [21.12.2009 19:53:22]

#

Lähinnä ajattelin joitain muita funktioita...

Chiman [21.12.2009 20:11:23]

#

Niin? Mitä funktioita? Voit käyttää niitä ihan normaaliin tapaan.

os [21.12.2009 20:41:23]

#

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ää.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta