führt localhost:8080/cgi-bin/cgi.py nicht aus

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Dadapf
User
Beiträge: 28
Registriert: Mittwoch 16. Dezember 2009, 09:16

Guten Morgen,

ich hoffe, in dieser Rubrik richtig zu sein.
Ich habe unter .../httpServer den Python-http-Server laufen:

Code: Alles auswählen

  #! /usr/bin/python
  # -*- coding: utf-8 -*-
  from BaseHTTPServer import HTTPServer
  from CGIHTTPServer import CGIHTTPRequestHandler
  Serveradresse = ('', 8080)
  Server = HTTPServer(Serveradresse, CGIHTTPRequestHandler)
  Server.serve_forever()
Unter .../httpServer/cgi-bin/ steht das Skript cgi.py. Doch der Browser (firefox und opera, unter opensuse) vermelden beim Aufruf von http://localhost:8080/cgi-bin/cgi.py nur: Error code 404, No such CGI script ('/cgi-bin/cgi.py').
Spaßeshalber habe ich es auch einmal in .../httpServer geschoben; da findet der Browser es und druckt es in seinem Fenster aus. Tippfehler können es somit nicht sein.
Weiß mir bitte jemand Rat?

Dadapf
Zuletzt geändert von Dadapf am Freitag 29. Oktober 2010, 13:27, insgesamt 3-mal geändert.
Dadapf
User
Beiträge: 28
Registriert: Mittwoch 16. Dezember 2009, 09:16

Nun ja, ich habe den http-Server aus einem anderen Verzeichnis heraus gestartet gehabt ...
Jetzt habe ich ihn unter .../httpServer gestartet; dort wo die Datei auch liegt. Nun findet er die Datei unter .../httpServer/cgi-bin/cgi.py.
Doch er führt sie nicht aus, sondern will sie abspeichern ... Opera bringt nur eine weiße Seite. In cgi.py steht:

Code: Alles auswählen

  #! /usr/bin/python
  # -*- coding: utf-8 -*-
  print '<?xml version="1.0" encoding="UTF-8"?>'
  print '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-  strict.dtd">'
  print '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de">'
  print '   <head>'
  print '   </head>'
  print '   <body>'
  print '			<h1>Assamir - Bilder aus den Bergen, Jahr 2010</h1>'
  print '   </body>'
  print '</html>'
Der html-Text selber ist valide.
Weiß hier jemand Rat?

Dadapf
Zuletzt geändert von Dadapf am Freitag 29. Oktober 2010, 08:58, insgesamt 2-mal geändert.
Benutzeravatar
lutz.horn
User
Beiträge: 205
Registriert: Dienstag 8. November 2005, 12:57
Wohnort: Pforzheim

Kannst Du den Code in Deinen Postings bitte in die entsprechende Tags einschließen?
https://www.xing.com/go/invite/18513630.6a91d4
Dadapf
User
Beiträge: 28
Registriert: Mittwoch 16. Dezember 2009, 09:16

Ohne Javascript funktionierten die oberen Schaltflächen nicht; gut, ich brauche sie nicht unbedingt, habe ich mir gedacht.
Mit Javascript funktionieren sie und schließen mir, z. B. "python", den markierten Text mit [python]...[/python] - grafisch ändert sich sonst nichts.
Erst wenn man BBCode zulässt, ändert sich auch grafisch etwas - nur dies ist nirgendwo beschrieben ...
Zumindest habe ich es nirgendwo gefunden.
Ich hoffe, so ist`s jetzt recht,

Dadapf
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Auch wenn das das Problem an sich nicht löst: Gibt es einen trifftigen Grund, das alles so low-Level selber zu implementieren? Augenscheinlich macht Dir das ja gerade viele Probleme und wenn ich die HTML-Fragmente richtig deute, geht es Dir eher um Content und nicht um irgend welche Low-Level Architektur-Geschichten...
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

Python CGIs müssen mit den Content-Type und ein Leerzeile vor dem eigentlichen Inhalt ausgeben, sonst funktioniert das nicht.

Ist in der Python-Doku auch erklärt. :-)

EDIT: BTW - wenn da nur HTML ausgeben willst, ist CGI ziemlich überflüssig... ;-)

Gruß, noisefloor
Dadapf
User
Beiträge: 28
Registriert: Mittwoch 16. Dezember 2009, 09:16

zum "low-level": Jain. Ich will einen Teil meiner Internetseiten von statisch auf dynamisch umstellen (Bildergalerien) und muss/sollte das Skript vorher zu Hause testen. Auf meinen Rechnern hier läuft allerdings kein http-Server; daher ist der Python-Server die wirklich einfachste Testmöglichkeit.

> Python CGIs müssen mit den Content-Type und ein Leerzeile vor dem
> eigentlichen Inhalt ausgeben, sonst funktioniert das nicht.
Tja, in meinen beiden (Lern-) Quellen stehen die beiden Zeilen

Code: Alles auswählen

print "Content-type: text/html"
print ""
auch, ich habe es jedoch nicht so interpretiert oder so genau gelesen, dass sie zwingend notwendig sind. Mit den beiden Zeilen funktioniert es.
Vielen Dank,

Dadapf
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Dadapf hat geschrieben:zum "low-level": Jain.
Bist Du sicher, dass Du Dir dann nicht lieber ein Framework ansehen willst, wie bottle oder flask? Da WSGI basiert, kannst Du es auf so ziemlicher jeder Server-Infrastruktur laufen lassen. Zudem musst Du Dich eben mit solch nervigen Fehlersuchen nicht plagen ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Dadapf
User
Beiträge: 28
Registriert: Mittwoch 16. Dezember 2009, 09:16

Mit Frameworks habe ich mich vor einiger Zeit auch kurz auseinandergesetzt und dann beschlossen, lieber selbst zu schreiben. Die Namen bottle und flask sagen mir jetzt jedoch nichts, werde mal danch suchen.

Dadapf
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Mit Frameworks habe ich mich vor einiger Zeit auch kurz auseinandergesetzt und dann beschlossen, lieber selbst zu schreiben. Die Namen bottle und flask sagen mir jetzt jedoch nichts, werde mal danch suchen.
Ging mir am Anfang genau so. Aber, es ist in der Tat so: Mit Bottle oder Flask sind kleine Webanwendungen _deutlich_ einfacher zu realisieren. Und die bist ähnlich portabel wie mit CGI, weil sich Bottle und Flask recht einfach an eine Reihe von Servern binden lassen.
Und du bekommst für beide guten Support hier im Forum - direkt von den Autoren. Beide sind hier aktiv. :-)

Gruß, noisefloor
Antworten