Raspberry, Windows Browser:Python-Programm startet nicht

Gast #6645303
Lesenswert?

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>')
10
print ('</body>')
11
print ('</html>')
Gast #6645307
Lesenswert?

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
#6645566
Lesenswert?

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.
#6645633
Lesenswert?

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/
#6646721
Lesenswert?

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.
Gast #6650539
Lesenswert?

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...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren