Das unten stehende Python-Programm ist in einem Raspberry-Verzeichnis
abgelegt. Es ist als 'execute a+x' markiert worden. Rufe ich es auf
(Windows FireFox), dann wird es nicht ausgeführt sondern der Quelltext
im Browser dargestellt. Erwartet hätte ich, dass eine HTML-Seite
angezeigt wird.
Aufruf: http://192.168.178.26:8000/ramdisk/hello.py
Was muss ich ändern, damit das Python-Programm ausgeführt wird?
1
#!/usr/bin/python3
2
3
print ("Content-type:text/html\r\n\r\n")
4
print ('<html>')
5
print ('<head>')
6
print ('<title>Hello World - First CGI Program</title>')
7
print ('</head>')
8
print ('<body>')
9
print ('<h2>Hello World! This is my first CGI program</h2>')
Ingo schrieb:> Rufe ich es auf> (Windows FireFox), dann wird es nicht ausgeführt sondern der Quelltext> im Browser dargestellt.
Ein Browser stellt HTML-Seiten dar, ggf. auch Text, aber führt kein
Python-Programm aus.
> Was muss ich ändern, damit das Python-Programm ausgeführt wird?
Python istallieren
Ingo schrieb:> Das unten stehende Python-Programm ist in einem Raspberry-Verzeichnis> abgelegt. Es ist als 'execute a+x' markiert worden. Rufe ich es auf> (Windows FireFox), dann wird es nicht ausgeführt sondern der Quelltext> im Browser dargestellt. Erwartet hätte ich, dass eine HTML-Seite> angezeigt wird.>> Aufruf: http://192.168.178.26:8000/ramdisk/hello.py>> Was muss ich ändern, damit das Python-Programm ausgeführt wird?
Nunja, Du brauchst zwei Dinge: a) einen Webserver (wie Apache httpd,
nginx, oder einen Ähnlichen), der auf einem Port (üblicher Standard
sind: 80 (http) und 443 (https)) lauscht und der b) so konfiguriert ist,
daß er CGI-Skripte in genau dem Verzeichnis ausführt, in sich dem Dein
Python-Programm befindet.
Sheeva P. schrieb:> Nunja, Du brauchst zwei Dinge: a) einen Webserver [...] der b)> so konfiguriert ist, [...]
Ach ja: Python ist (auch) in der Webentwicklung ziemlich stark und
bietet daher einige Möglichkeiten, die Du Dir vielleicht ansehen
möchtest, bevor Du mit ollem Unsinn wie CGI herumhantieren möchtest.
Da wäre zum Beispiel Flask: ein Microframework, das im Kern nur aus
einem Mapper von URLs auf Funktionen und der Template-Engine Jinja2
besteht. Sinnvolle Seiten zum Anschauen und Lernen: [1-3].
Das Webframework Django bietet die Funktionen von Flask, und erweitert
sie um zum Beispiel einen objektrelationalen Mapper zum Ansprechen einer
SQL-Datenbank, dazu ein Berechtigungskonzept und eine automatisch
erzeugten Admin-Schnittstelle: [4].
Es gibt noch eine Reihe weiterer Frameworks, aber diese beiden dürften
heute die mit Abstand verbreitetsten, bestdokumentierten, und
bestunterstützten sein. (Wer weitere hinzufügen mag, ist auch mir
natürlich herzlich willkommen.) Beide haben einen integrierten Webserver
für die Entwicklung, den Du allerdings unter keinen Umständen produktiv
nutzen solltest!
Für Flask brauchst Du nicht viel: keine Datenbank, keine Berechtigungen,
und nur relativ überschaubare Python-Kenntnisse. Django dagegen ist eine
andere Nummer, das setzt gewisse Python-Kenntnisse und zwingend eine
SQL-Datenbank voraus.
[1] https://flask.palletsprojects.com/en/1.1.x/
[2]
https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world
[3] https://exploreflask.com/en/latest/
[4] https://www.djangoproject.com/
Für ganz minimale Anwendungen kann man einen Python-Server auf Basis von
HTTPServer selbst basteln.
1
#!/usr/bin/env python3
2
from http.server import HTTPServer, BaseHTTPRequestHandler
3
from datetime import datetime
4
5
class Handler(BaseHTTPRequestHandler):
6
def do_GET(self):
7
self.send_response(200)
8
self.send_header("Content-type", "text/html")
9
self.end_headers()
10
zeit = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
11
page = f'''<html>
12
<body>
13
<h1>hello world</h1>
14
<p>Datum und Zeit: {zeit}</p>
15
</body>
16
</html>'''
17
self.wfile.write(page.encode("utf8"))
18
19
httpd = HTTPServer(('localhost', 8000), Handler)
20
httpd.serve_forever()
Sobald es komplizierter als dieses Beispiel ist (das wird es sicherlich
werden, wenn es erstmal funktioniert), ist eine vernünftige Lösung a la
Flask sinnvoller.
Ingo schrieb:> Erwartet hätte ich, dass eine HTML-Seite> angezeigt wird.
Völlig falsche Erwartung.
Du hast nicht ansatzweise begriffen, was ein Webserver (und ein
Webbrowser) tut (und was sie aus guten Gründen nicht tun)...
Merke: Eine Seite in einem Browser mag manchmal so ähnlich aussehen wie
ein Fenster einer lokalen GUI-Shell. Es ist aber trotzdem etwas völlig
anderes...