Seite 1 von 1

Browseranzeige per CGI aktualisieren

Verfasst: Montag 7. Februar 2005, 23:29
von alpha
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

Verfasst: Montag 7. Februar 2005, 23:57
von 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".

Verfasst: Dienstag 8. Februar 2005, 00:38
von Leonidas
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.

Verfasst: Dienstag 8. Februar 2005, 07:12
von jens

Verfasst: Mittwoch 9. Februar 2005, 00:00
von alpha
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

Verfasst: Mittwoch 9. Februar 2005, 08:28
von 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

Verfasst: Mittwoch 9. Februar 2005, 08:30
von 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

Verfasst: Mittwoch 9. Februar 2005, 08:32
von jens
Soory, war nicht eingeloggt, deswegen zwei Beiträge, die eigentlich einer sein sollen :x

Verfasst: Mittwoch 9. Februar 2005, 09:48
von Leonidas
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.

Verfasst: Donnerstag 10. Februar 2005, 00:28
von alpha
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

Verfasst: Donnerstag 10. Februar 2005, 16:52
von 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.

Verfasst: Donnerstag 10. Februar 2005, 17:14
von Leonidas
Alternativ gibt es auch noch die Trippel Strings, die da etwas robuster sind:

Code: Alles auswählen

a = '''bc'''
b = """bc"""
print a == b

Verfasst: Freitag 11. Februar 2005, 07:13
von jens
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

Verfasst: Freitag 11. Februar 2005, 12:01
von Leonidas
Ja, das habe ich leider auch bemerkt :(