Forum: PC-Programmierung Raspberry, Windows Browser:Python-Programm startet nicht


von Ingo (Gast)


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>')

von ///..\\\ (Gast)


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

von Marc G. (marcm)


Lesenswert?


von Sheeva P. (sheevaplug)


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.

von Sheeva P. (sheevaplug)


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/

von Tom K. (ez81)


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.

von c-hater (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.