mám problém se zápisem do souboru. Mám vytvořit skript, který do určitého souboru zapíše IP adresu klienta, jméno doménového počítače klienta a jméno, které vyplnil do formuláře. Celé to pracuje se zcela primitivním formulářem o jednom políčku a mě zajímá, jak zapíšu do pythonu kód, aby mi do souboru vypsal požadované věci.
#!/usr/bin/python
import cgi
import os
import cgitb
cgitb.enable()
print 'Content-type: text/html'
print
print "<h1>Ahoj</h1>"
cgi.print_environ()
print "odkud:", os.getenv("REMOTE_ADDR"), os.getenv("REMOTE_HOST")
form = cgi.FieldStorage()
# nahore je kod ze cviceni, zde jen pro ilustraci
# smerem dolu zapis do souboru, nevim jak to cele napsat, aby zapisovalo spravne, zatim zapisuje pouze ty casti hned za f.write, tzn: "IP adresa klienta: ", "domenove jmeno pocitace klienta: ", "jmeno zadane do pocitace: "
f = open('log.txt', 'a')
f.write("IP adresa klienta: "), os.getenv("REMOTE_ADDR")
f.write("domenove jmeno pocitace klienta: "), os.getenv("REMOTE_HOST")
f.write("jmeno zadane do pocitace: "), os.getenv("QUERY_STRING")
f.write("\n")
f.close()
Doufám, že jsem problém popsal srozumitelně, snad se najde někdo, kdo pomůže. :)
#2zlz
Něco podobnýho už jsem zkoušel a pokaždý mi to vyhodí tuhle chybu:
Traceback (most recent call last):
File "cesta/soubor", line 18, in <module>
f.write(os.getenv("REMOTE_ADDR"))
TypeError: expected a character buffer object
Ty to spouštíš jako normální program u sebe, viď? CGI skripty jsou určené ke spouštění přes webserver, tam ty proměnné budou nastavené a getenv bude vracet jejich hodnotu. Ten druhý parametr tam nech.
ano spouštím to v Pythonu pomocí F5, protože ten html soubor s formulářem, když spustím u sebe, tak mi zobrazí stránku se zdrojákem v pythonu.
Adresa, přes kterou jinak spouštím formulář odkazuje na *.cgi soubor, který je uložen ve škole, tudíž ho nemůžu změnit a žádných výsledků se nedočkám (a do školy se tento týden už nedostanu :D).
Takže velmi pěkně děkuji za radu, budu doufat, že máš pravdu a odevzdám to takhle.
Ne nutně zrovna "<nedefinovano>", třeba prázdný řetězec "". Jen pro jistotu, aby tam něco bylo a náhodou to zase nehodilo chybu.
A v Pythonu jde jednoduše udělat CGI server. Toto si ulož a spusť. Ve stejné složce vytvoř složku cgi, hoď do ní ten svůj pokus a na http://localhost:8080/ můžeš testovat.
import os
import CGIHTTPServer
import BaseHTTPServer
class Handler(CGIHTTPServer.CGIHTTPRequestHandler):
cgi_directories = ["/cgi"]
def is_cgi(self):
if os.path.isdir(self.translate_path(self.path)):
return False
return CGIHTTPServer.CGIHTTPRequestHandler.is_cgi(self)
httpd = BaseHTTPServer.HTTPServer(("", 8080), Handler)
httpd.serve_forever()