Browseranzeige per CGI aktualisieren

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
alpha
User
Beiträge: 195
Registriert: Freitag 23. Mai 2003, 23:24
Wohnort: Ulm

Hallo Leute,

ich hab mal eine vieleicht wieder merkwürdige Frage.
Ist es in einem CGI-Script möglich die HTML-Seite zu aktualisieren ohne, daß
der Benutzer immer auf den Reload-Button des Browsers klicken muß?
Ist das mal wieder eine von meinen ungewöhnlichen Anforderungen??

Vieleicht kann mir jemand einen kleinen Codeschnipsel schicken falls dies doch möglich ist.

Danke schon mal.

alpha
BlackJack

Vorweg: Ich habe eigentlich keine konkrete Ahnung davon.

Aber soweit ich weiss kann man vom Server eine Seite auch als "Multipart" senden und so immer aktualisierte Seiten nachschieben. Suchworte für Google wären wohl "CGI server push multipart".
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Jup, dazu brauch man aber kein CGI Script sondern HTML :)
<meta http-equiv="refresh" content="SEKUNDEN; URL=URL">
Als Beispiel mal eine Seite sie sich nach 25 Sekunden selbst wieder aufruft: FM4 Listings.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

alpha
User
Beiträge: 195
Registriert: Freitag 23. Mai 2003, 23:24
Wohnort: Ulm

Danke erst mal für die Antworten. Leider hab ich noch ein Problem. Wenn ich die Zeile

<meta http-equiv="refresh" content="25; URL=stream">

in mein Script

Code: Alles auswählen

#!/usr/bin/python
from time import *
print "Content-Type: text/html" # Header
print
print "<html><head><title> CGI-Script </title></head>"
print "<meta http-equiv="refresh" content="25; URL=stream">"
print "<body><h1>Datum und Zeit</h1>"
print "Es ist ", ctime( time() ) + "."
print "</body></html>"
einbinde bekomm ich ne Syntax Fehlermeldung vom Server.

File "/home/alpha/scripts/python/cgi-bin/mycgi.py", line 6
print "<meta http-equiv="refresh" content="25; URL=stream">"
^
SyntaxError: invalid syntax
amd64 - - [08/Feb/2005 23:56:39] CGI script exit status 0x100

Hat vieleicht jemand ne Erklärung dafür???

Danke schonmal für die Mühe.

alpha
Gast

Die Anführungszeichen sind falsch. So geht's:

Code: Alles auswählen

print '<meta http-equiv="refresh" content="25; URL=stream">'
Oder so:

Code: Alles auswählen

URL = "test.de"
print '<meta http-equiv="refresh" content="25; URL=%s">' % URL
Gast

Anonymous hat geschrieben:Die Anführungszeichen sind falsch. So geht's:

Code: Alles auswählen

print '<meta http-equiv="refresh" content="25; URL=stream">'
Oder so:

Code: Alles auswählen

URL = "test.de"
print '<meta http-equiv="refresh" content="25; URL=%s">' % URL
Benutze mal import cgitb ; cgitb.enable() in deinem Skript, dann siehtst du auch eine richtige Fehlermeldung. s. http://www.python.org/doc/current/lib/module-cgitb.html
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Soory, war nicht eingeloggt, deswegen zwei Beiträge, die eigentlich einer sein sollen :x
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Danvon mal abgesehen, dass es nicht stream sondern der Name deines Scriptes sein sollte.. denn mit meta refresh kann man auch auf andere Seiten umleiten.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
alpha
User
Beiträge: 195
Registriert: Freitag 23. Mai 2003, 23:24
Wohnort: Ulm

Super,

vielein Dank euch allen. Jetzt klappt es. Ich war immer der Meinung, daß
" und ' in Python das gleiche bewirken. Man lernt eben nie aus.

Vielen Dank nochmal.

alpha :D
BlackJack

Nun, sie bewirken auch das gleiche. Man startet/beendet damit Zeichenketten. Schau Dir nochmal den Quelltext hier an, der den Syntaxfehler provoziert. Da wirst Du sehen, das ein " mitten in einer Zeichenkette, die mit " angefangen wurde eben diese Zeichenkette dort beendet! Also kannst Du nur das jeweils andere Zeichen innerhalb einer Zeichenkette verwenden oder musst sie eben mit \ schützen.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Alternativ gibt es auch noch die Trippel Strings, die da etwas robuster sind:

Code: Alles auswählen

a = '''bc'''
b = """bc"""
print a == b
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Leonidas hat geschrieben:Alternativ gibt es auch noch die Trippel Strings
Wobei diese den großen Vorteil haben, das man damit über eine Zeile hinaus kommt. Leider wird dabei das Einrücken nicht beachtet :( Somit ist entweder der Code oder die Ausgabe etwas häßlich:

Code: Alles auswählen

def test():
    print """Zeile1
    Zeile2
    Zeile3"""

test()
Ausgabe:

Code: Alles auswählen

Zeile1
    Zeile2
    Zeile3
ODER

Code: Alles auswählen

def test():
    print """Zeile1
Zeile2
Zeile3"""

test()
Ausgabe:

Code: Alles auswählen

Zeile1
Zeile2
Zeile3
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ja, das habe ich leider auch bemerkt :(
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten