Pyhton in html laufen lassen

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.
quink
User
Beiträge: 10
Registriert: Mittwoch 25. April 2012, 10:44

Hallo,
ich habe mit Python angefangen und habe meine ersten kleinen (einfachen) Programme in Python geschrieben.

Nun lese ich davon das es gehen soll Python auf einer Webseite laufen zu lassen. Webspace habe ich, python wird da auch vom Provider unterstützt. Einfache Erfahrungen in html habe ich auch, nur ich weiß nicht wie ichs anfangen soll.

Ich möchte im Grunde erstmal das ein einfaches Python Programm da läuft, zb. das berühmte Hallo Welt, besteht ja in Python aus einer Zeile:
print "Hallo Welt"

Wie kann ich diese Python Zeile nun im html Quelltext unterbringen das mir auf der Webseite nur Hallo Welt angezeigt wird?

Eine html Seite sieht ja so aus:

<html>
<head>
</head>
<body>

</body>
</html>

Wie bzw. was müßte ich nun zwischen <body> und </body> einfügen das da Hallo Welt rauskommt?

Ich hoffe ihr könnt mir helfen, ich habe schon den ganzen Tag gegoogelt, aber ich finde nur englische Seiten zu diesem Thema und die kann ich nicht gut verstehen
problembär

Laut

http://www.pycon.it/media/stuff/slides/ ... rowser.pdf

braucht man dafür "Microsoft Silverlight", eine Browser-Erweiterung. Bei IronPython wahrscheinlich dabei.
Kann man sich sonst herunterladen, siehe z.B. für Firefox.
Mit Deinem Python-Code erreichst Du dann aber nur Browser, die das installiert haben. Ansonsten ist es immer noch üblich, in dem in Browsern verbauten JavaScript zu schreiben.
quink
User
Beiträge: 10
Registriert: Mittwoch 25. April 2012, 10:44

Mit Deinem Python-Code erreichst Du dann aber nur Browser, die das installiert haben.
Das ist natürlich schlecht..

Wie läßt man denn üblicherweise python code auf nem webserver laufen?

Beim googeln habe ich google app engine gefunden, soviel ich da verstanden habe kann man damit python code laufen lassen. Da stört mich aber dran das man sich google anmelden muß usw. Das muß doch auch so gehen das man python code schreibt und den auf sein webspace hochläd und wen die seite http://meineseite aufgerufen wird das dann der python code abläuft, also mein hallo World da steht
Ansonsten ist es immer noch üblich, in dem in Browsern verbauten JavaScript zu schreiben.
Wie würde eine html seite (der Quellcode) mit script ausehen der python aufruft/startet? Kann mir da jemand mal ein kleines Beispielprogramm hier rein stellen?
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

quink hat geschrieben:
Mit Deinem Python-Code erreichst Du dann aber nur Browser, die das installiert haben.
Das ist natürlich schlecht..

Wie läßt man denn üblicherweise python code auf nem webserver laufen?
problembaer redet von _client_seitigem Python-Code, also Python statt dem ueblichen Javascript. Sein Post hilft dir bei _server_seitigem Code also gar nicht weiter.

Schritt 1: Vergiss was du in PHP gelernt hast. Programme in HTML einzubetten bzw damit zu mischen ist keine gute Idee.
Schritt 2: Schau dir ein Python-Webframework an. Django ist ein grosses und weit verbreitetes und daneben werden hier noch oft die Mikroframeworks Bottle und Flask empfohlen.

Das eigentliche Ausfuehren passiert dann ueber den Webserver.

Wenn du aber sagst, dass der Provider Python unterstuetzt, dann musst du dich schlau machen _wie_ er es unterstuetzt. Davon haengt dann der weitere Weg ab.
BlackJack

@quink: Ignoriere die Antwort von problembär am besten, denn die hat mit der Fragestellung nicht wirklich etwas zu tun. Weil da der Code eben nicht auf dem Server läuft und auch nur in einer sehr begrenzten Anzahl von Browsern.

Du möchtest eigentlich gar keinen Python-Quelltext in das HTML hinein schreiben. Solltest Du wirklich Code in HTML schreiben wollen, empfehle ich Dir PHP.

Den umgekehrten Weg — HTML in Programmquelltext zu schreiben — möchte man eigentlich auch nicht. Das könntest Du mit CGI machen. Python hat dafür ein Modul in der Standardbibliothek.

Üblicherweise schreibt man Webanwendungen aber heutzutage mit einem entsprechenden Rahmenwerk. Das kann ein grosses und umfangreiches wie Django sein. Oder aber auch ein Mikrorahmenwerk wie Bottle oder Flask. Schau Dir bei denen doch einfach mal die Tutorials an — da sind auch Beispiele in der „Hallo Welt”-Kategorie zu finden.
problembär

Aus dem Ausgangsposting ergibt sich nicht, ob er das serverseitig laufen lassen wollte. Es deutet eher auf clientseitig hin. Ich glaube auch immer noch, daß er sich das so vorstellt.

Die Frage:
Wie bzw. was müßte ich nun zwischen <body> und </body> einfügen das da Hallo Welt rauskommt?
habt ihr nicht beantwortet.
Wenn es serverseitig sein soll, hätte man eine html-Seite, wahrscheinlich mit JavaScript-Code darin, die mit einem Python-CGI-Skript auf einem Server interagiert. Es ist gar nicht so leicht, deutsche Beispiel-Tutorials dazu zu finden:

http://www.suncol.de/programmierung/pyt ... eiten.html
http://www.html-world.de/program/python_6.php

Voraussetzung dürfte sein, daß Dein Provider Dir gestattet, CGI-Skripte auf seinen Server hochzuladen und dort auszuführen. (Zu Übungszwecken kann man das Ganze auch erstmal simulieren, indem man auf seinem lokalen Rechner einen Webserver installiert und auf diesen nur von demselben Rechner aus lokal zugreift.
Tatsächlich kann man in Python in ein paar Zeilen einen html-Server per Skript erstellen:

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: utf-8 -*-

# httpd.py

import sys

from BaseHTTPServer import HTTPServer
from CGIHTTPServer import CGIHTTPRequestHandler

serveradresse = ("", 8080)
server = HTTPServer(serveradresse, CGIHTTPRequestHandler)

try:
    print
    print "Serving:"
    print "Please open a browser and point it to \"http://localhost:8080/test.html\""
    print "Press \"CTRL+c\" to exit."
    server.serve_forever()

except KeyboardInterrupt:
    print "Bye."
    sys.exit
und dazu "test.html", in demselben Verzeichnis wie das Server-Skript:

Code: Alles auswählen

<html>
<body>
test.html
<p>Hello from Python-Server.
</body>
</html>
Vielleicht könnte jemand anders dazu mal eine html-Seite und ein CGI-Skript schreiben (und beschreiben, wo man es ablegt)? Dann hätte man schon ein vollständiges Beispiel.)

Würde man für ein einfaches "Hallo Welt" eines der empfohlenen Web-Frameworks einsetzen, hätte man "mit Kanonen auf Spatzen geschossen".
webspider
User
Beiträge: 485
Registriert: Sonntag 19. Juni 2011, 13:41

problembär hat geschrieben:Würde man für ein einfaches "Hallo Welt" eines der empfohlenen Web-Frameworks einsetzen, hätte man "mit Kanonen auf Spatzen geschossen".
Dann musst du mir mal erklären was an einem Snippet wie diesem überdimensioniert sein soll:

Code: Alles auswählen

from bottle import route, run

@route("/")
def hello_world():
    return "Hello World!"

run(host="localhost", port=8080)
Benutzeravatar
sparrow
User
Beiträge: 4195
Registriert: Freitag 17. April 2009, 10:28

problembär hat geschrieben: Wenn es serverseitig sein soll, hätte man eine html-Seite, wahrscheinlich mit JavaScript-Code darin, die mit einem Python-CGI-Skript auf einem Server interagiert. Es ist gar nicht so leicht, deutsche Beispiel-Tutorials dazu zu finden:
Au weia...
das glaube ich allerdings, dass da dazu schwierig Tutorials zu finden sind...
BlackJack

@problembär: Das Ausgangsposting deutet eher auf serverseitig hin, denn sonst wäre der Hinweis, dass Webspace vorhanden ist dessen Anbieter Python unterstützt, sinnfrei gewesen.

Und die Frage haben wir beantwortet. Nämlich mit den Hinweisen auf die Webrahmenwerke. Was da *genau* hinkommt, hängt halt vom verwendeten Template-System ab, lässt sich so also nicht direkt beantworten, ohne zu wissen wofür sich quink entscheidet.

Du unterstellst uns mit Kanonen auf Spatzen zu schiessen, fabulierst aber etwas mit JavaScript was dann mit Python-CGI auf dem Server komminiziert um dann „Hallo Welt” in der Seite darzustellen. Ne, is' schon klar… :roll:
quink
User
Beiträge: 10
Registriert: Mittwoch 25. April 2012, 10:44

Danke für eure Antworten, aber inzwischen versteh ich gar nichts mehr..

Ob und wie das läuft wäre mir egal, ich möchte einfach nen python programm, zb. ein hallo welt laufen lassen und zwar im endeffekt so wenn einer auf meine Seite geht und da steht dann einfach (in diesem Beispiel Hallo Welt). Ziel des ganzen sollte dann sein das ich kleine python programme schreibe (zb. kleine Programme wo was berechnet wird) und die halt von jedem zu sehen sind der auf der Seite ist (also keine zusätzlichen browser plugins).

Ich schrieb oben das ich dabei nicht wirklich beim googeln was gefunden habe, nur dieses google app engine, aber laut deren Anleitung soll das genau sein was ich möchte, man schreibt ein python programm und dieses wird unter dem link http://xy angezeigt. Bei google app engine stört mich halt diese google anmeldung ohne die es nicht geht und das die links die rauskommen alle http://blablabla.appspot.com heißen. Aber ich will nicht auf appspot.com, sondern die sollen auf meiner seite http://meineseite liegen.
Die Frage nun wie rmach ich das das die python programme bei mir laufen?
nomnom
User
Beiträge: 487
Registriert: Mittwoch 19. Mai 2010, 16:25

cofi hat geschrieben:Wenn du aber sagst, dass der Provider Python unterstuetzt, dann musst du dich schlau machen _wie_ er es unterstuetzt. Davon haengt dann der weitere Weg ab.
Mach das mal und sag uns dann, wie er es unterstützt oder, falls du es nicht herausbekommen solltest, sag uns, bei welchem Provider du bist. :)
lunar

@quink: Man hat Dich doch bereits auf entsprechende Bibliotheken wie Django verwiesen. Lies doch dort einfach mal die Tutorials durch. Das mag schwieriger sein, als Du es Dir jetzt gerade vorstellst, aber Webanwendungen sind allgemein kein einfaches Thema, und wenn Du Dich erstmal eingelesen hast, ist es auch nicht mehr so schwer.
quink
User
Beiträge: 10
Registriert: Mittwoch 25. April 2012, 10:44

Die meisten Tutorials sind in englisch und davon verstehe ich nicht viel.
Deßhalb frage ich ja hier im Forum und ob hier mir wer zeigen kann (mit einem kleinen Beispielprogramm) wie ich ein einfaches Python Hallo World Programm laufen lassen kann
BlackJack

@quink: Wenn Du kein Englisch kannst, dann kannst Du das mit dem programmieren von komplexeren Programmen im Grunde vergessen. Du wirst kaum Dokumentation zu allen Bibliotheken komplett in Deutsch finden, wenn überhaupt, und das lesen und verstehen von Dokumentation ist essentiell. Das kann man auf Dauer nicht durch ein paar deutsche Tutorials ersetzen, die nur an der Oberfläche kratzen.

Edit: Ein Minimalbeispiel mit Bottle ist hier ja schon gezeigt worden. Wie und ob Du das auf Deinem Webspace zum laufen bekommst, hängt wie schon mehrfach gesagt wurde, davon ab wie und in welchem Umfang Dein Anbieter Python unterstützt.
quink
User
Beiträge: 10
Registriert: Mittwoch 25. April 2012, 10:44

soll ich jetzt extra englisch lernen nur um zu erfahren wie man hallo welt in python zum laufen bringt (ohne fertige Lösungen wie google app engine zu verwenden)? Hier sind doch Python Spezialisten die sich schon lange mit Python beschäftigen, weiß denn keiner von euch wie man das macht?
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

Für 'Hallo Welt' sicherlich nicht. Aber da du ja durchaus Ambitionen hast, noch andere Programme zu schreiben und dich auch mit komplexen Themen wie der Web-Entwicklung auseinanderzusetzen, solltest du tatsächlich ernsthaft darüber nachdenken, dein Schul-Englisch aufzubessern. Deutsche Dokumentation ist rar und in der regel nicht auf dem aktuellen Stand. Gerade bei Nischen-Themen bleibst du ohne Englisch schnell auf der Strecke. Und gerade Web-Entwicklung ist ein umfangreicher Bereich mit vielen Besonderheiten, die du dir einfach anhand von Dokumentation erarbeiten mußt. Das wird dir hier niemand vorkauen, dafür fehlt uns schlicht die Zeit.

Um zum eigentlichen Problem zurückzukommen: Es gibt viele, in sich grundverschiedene Möglichkeiten, wie ein Anbieter Python unterstützen kann. CGI, mod_python, mod_wsgi, um nur ein paar zu nennen. Und je nachdem, welche es ist, wird die Antwort auf deine Frage ganz unterschiedlich ausfallen. So lange, wie du uns nicht sagst, welche es ist, wird dir ohnehin niemand antworten können.
quink
User
Beiträge: 10
Registriert: Mittwoch 25. April 2012, 10:44

CGI, mod_python, mod_wsgi, wird unterstützt. Hilft das weiter? Wie gehe ich nun vor?
BlackJack

@quink: Von den drei Möglichkeiten ist `mod_wsgi` der aktuell empfehlenswerte Weg. Wenn Du Bottle als Rahmenwerk wählst gibt es dazu im Bottle-Tutorial den kurzen Abschnitt Apache mod_wsgi. Ein wenig Ahnung von Apache und dessen Konfiguration und der WSGI-Schnittstelle im allgemeinen ist sicher nicht schlecht.
problembär

@quink: Es gibt sicher mehrere Möglichkeiten zu tun, was Du möchtest. Mein Vorschlag ist eher traditionell, aber gut geeignet, um das Prinzip zu verstehen.
Also: Folgendes geht:

1. Erstelle ein Verzeichnis "test".
2. Erstelle darin das Webserver-Skript "httpd.py":

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: utf-8 -*-

# httpd.py

import sys

from BaseHTTPServer import HTTPServer
from CGIHTTPServer import CGIHTTPRequestHandler

serveradresse = ("", 8080)
server = HTTPServer(serveradresse, CGIHTTPRequestHandler)

try:
    print
    print "Serving:"
    print "Press \"CTRL+c\" to exit."
    server.serve_forever()

except KeyboardInterrupt:
    print "Bye."
    sys.exit
3. Erstelle in dem Verzeichnis "test" ein Unterverzeichnis "cgi-bin". Viele Server erwarten offenbar, daß CGI- Skripte in einem Verzeichnis mit diesem Namen abgelegt sind.
4. Erstelle in dem Verzeichnis "test" eine html-Datei "test.html":

Code: Alles auswählen

<html>
<body>
<form method="post" action="/cgi-bin/hallo.py" target="_blank">
<input type="submit" name="submit" value="Click me"></input>
</form>
</body>
</html>
5. Erstelle in dem Unterverzeichnis "test/cgi-bin" ein Skript "hallo.py":

Code: Alles auswählen

#!/usr/bin/python
#-*- coding: utf-8 -*-
 
import cgi
 
print """
      <html>
      <body>
      Hallo von Python!
      </body>
      </html>
      """
6. Mache "test/httpd.py" und "test/cgi-bin/hallo.py" ausführbar.
7. Starte "httpd.py".
8. Öffne Deinen Browser und gib in das Adressfeld die Adresse

Code: Alles auswählen

http://localhost:8080/test.html
ein. Da solltest Du jetzt einen Button sehen.
9. Klicke auf den Button.

Jetzt sollte dort "Hallo von Python!" aus dem CGI-Skript "test/cgi-bin/hallo.py" erscheinen.

Erfreue Dich an Dingen, die funktionieren, und laß' Dir die Freude daran nicht von Nörglern hier kaputtmachen.

P.S.: Wenn Du das Beispiel oben verstanden hast, kannst Du daran gehen, statt des lokalen Webservers "test/httpd.py" den entfernten Webserver Deines Providers zu verwenden und ein CGI-Skript in einem Verzeichnis "cgi-bin" dort abzulegen.
Noch später kannst Du versuchen zu verstehen, was ein Web-Framework ist und versuchen, es auszuprobieren.

Schöne Grüße!
Zuletzt geändert von problembär am Donnerstag 26. April 2012, 17:04, insgesamt 1-mal geändert.
deets

Immer wieder schoen, Postings vom selbsternannten Raecher der Redefreiheit zu lesen.

An den OP: es ist dazu zu raten, problembaers "Loesungen" zu ignorieren. Sie sind nicht auf der Hoehe der Zeit, und auch wenn sie so lala funktionieren, ignorieren sie Eigenheiten von Python. Oder sind wie in diesem Fall viel zu kurz gegriffen, und nutzen Technologie, die veraltet ist. CGI ist nunmal ein uralter Minimalstandard, von dem eigentlich so ziemlich alles und jeder Abstand nimmt. Nur ein gewisser Baer mit Problemen nicht.

Und wenn du wirklich mit HTTP und HTML arbeiten willst, dann wirst du um Themen wie POST/GET-Variablen, Cookies, Sessions und Templating nicht herumkommen.

Das geht natuerlich auch alles zu Fuss - letztlich machen die genannten Microframeworks wie bottle.py das ja auch mit Python Bordmitteln. Aber fussend auf problembaer's code wirst du da ganz schoen in's schwimmen kommen. Er selbst zeigt ja auch nicht, wie man zB Formularwerte in dem CGI-Skript verarbeitet.
Antworten