Die CGI-Datei kann von Anfang an als CGI ausgeführt werden, sodass Sie sie mit Ausführungsberechtigung festlegen können.
$ ls -l ~/public_html/hello.cgi
-r-xr-xr-x 1 alice hpusers 414 12. Dezember 20:08 /virtual/alice/public_html/hello.cgi
Wenn die Erweiterung py sein soll, ist die .py-Datei nicht für die Ausführung als CGI ausgelegt. Platzieren Sie daher eine .htaccess-Datei, in der die Einstellungen für die Ausführung als CGI beschrieben sind.
$ ls -l ~/public_html/.htaccess
-rw-r--r--1 alice hpusers 27 Dezember 12 18:09 /virtual/alice/public_html/.htaccess
Der Inhalt von .htaccess wird wie folgt beschrieben.
.htaccess
AddHandler cgi-script .py
$ ls -l ~/public_html/hello.cgi
-r-xr-xr-x 1 alice hpusers 414 12. Dezember 20:08 /virtual/alice/public_html/hello.cgi
#!/usr/local/bin/python3
import io
import sys
#Geben Sie die Zeichenkodierung des Ausgabestreams an
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
#HTTP-Header
print('Content-Type: text/html; charset=utf-8')
print() # blank line, end of headers
#HTML-Body
print('<html><body>')
print('Hello, world.<br>')
print('Hallo Welt.<br>')
print('</body></html>')
$ curl http://alice.b1.coreserver.jp/hello.cgi
<html><body>
Hello, world.<br>
Hallo Welt.<br>
</body></html>
$ ls -l ~/public_html/message.py
-r-xr-xr-x 1 alice hpusers 565 12. Dezember 20:14 /virtual/alice/public_html/message.py
message.py
#!/usr/local/bin/python3
import cgi
import html
import io
import sys
#Geben Sie die Zeichenkodierung des Ausgabestreams an
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
#Ruft den Wert des Nachrichtenparameters ab
form = cgi.FieldStorage()
message = form.getfirst('message', 'Hello, world.')
#HTTP-Header
print('Content-Type: text/html; charset=utf-8')
print() # blank line, end of headers
#HTML-Body
print('<html><body>')
print(f'message: {html.escape(message)}') #HTML-Escape und Ausgabe
print('</body></html>')
$ curl http://alice.b1.coreserver.jp/message.py?message=%E7%BD%AA%E3%81%A8%C3%97
<html><body>
message:Sünde und ×
</body></html>
Installieren Sie diesmal die Pakete NumPy und Matplotlib im Verzeichnis ~ / my-space.
$ python3 -m pip install numpy matplotlib --target ~/my-space
Das Paket wird im Verzeichnis ~ / my-space installiert.
$ ls ~/my-space
__pycache__ numpy
bin numpy-1.17.4.dist-info
cycler-0.10.0.dist-info pkg_resources
cycler.py pylab.py
dateutil pyparsing-2.4.5.dist-info
easy_install.py pyparsing.py
kiwisolver-1.1.0.dist-info python_dateutil-2.8.1.dist-info
kiwisolver.cpython-36m-x86_64-linux-gnu.so setuptools
matplotlib setuptools-42.0.2.dist-info
matplotlib-3.1.2-py3.6-nspkg.pth six-1.13.0.dist-info
matplotlib-3.1.2.dist-info six.py
mpl_toolkits
$ ls -l ~/public_html/draw.py
-r-xr-xr-x 1 alice hpusers 922 15. Dezember 01:53 /virtual/alice/public_html/draw.py
draw.py
#!/usr/local/bin/python3
import io
import sys
#Fügen Sie dem Modul-Suchpfad den Bibliothekspfad hinzu
sys.path.append('../my-space')
#Laden Sie NumPy und Matplotlib
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
#Daten erstellen
x = np.arange(0, 6, 0.1) #0 bis 6 0.In Schritten von 1 generieren
y1 = np.sin(x)
y2 = np.cos(x)
#Zeichnen eines Diagramms
plt.figure(figsize=(4, 3), dpi=160) #Bildgröße
plt.plot(x, y1, label='sin')
plt.plot(x, y2, linestyle = '--', label='cos') #Zeichnen Sie mit gestrichelten Linien
plt.xlabel('x') #x-Achsenbeschriftung
plt.ylabel('y') #Beschriftung der y-Achse
plt.title('sin & cos') #Titel
plt.legend() #Gebrauchsanweisung
#Generieren Sie eine PNG-Bildbytezeichenfolge
image = io.BytesIO()
plt.savefig(image, format='png')
image.seek(0)
#HTTP-Header
sys.stdout.buffer.write(b'Content-Type: image/png\n\n')
#Bildbinärdaten ausgeben
sys.stdout.buffer.write(image.read())
$ curl --dump-header - -s http://alice.b1.coreserver.jp/draw.py --output a.png
HTTP/1.1 200 OK
Date: Sat, 14 Dec 2019 17:05:05 GMT
Server: Apache
Vary: User-Agent
Transfer-Encoding: chunked
Content-Type: image/png
Eine PNG-Datei gespeichert.