--Exécuter le CGI de Python sur le serveur de location GMO DigiLock "Core Server"
Le fichier .cgi peut être exécuté en tant que CGI depuis le début, vous pouvez donc le définir avec l'autorisation d'exécution.
$ ls -l ~/public_html/hello.cgi
-r-xr-xr-x 1 alice hpusers 414 12 décembre 20:08 /virtual/alice/public_html/hello.cgi
Si vous souhaitez que l'extension soit py, le fichier .py n'est pas conçu pour s'exécuter en tant que CGI, alors placez un fichier .htaccess qui décrit les paramètres d'exécution en tant que CGI.
$ ls -l ~/public_html/.htaccess
-rw-r--r--1 alice hpusers 27 décembre 12 18:09 /virtual/alice/public_html/.htaccess
Le contenu de .htaccess est décrit comme suit.
.htaccess
AddHandler cgi-script .py
$ ls -l ~/public_html/hello.cgi
-r-xr-xr-x 1 alice hpusers 414 12 décembre 20:08 /virtual/alice/public_html/hello.cgi
#!/usr/local/bin/python3
import io
import sys
#Spécifiez le codage des caractères du flux de sortie
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
#En-tête HTTP
print('Content-Type: text/html; charset=utf-8')
print() # blank line, end of headers
#Corps HTML
print('<html><body>')
print('Hello, world.<br>')
print('Bonjour le monde.<br>')
print('</body></html>')
$ curl http://alice.b1.coreserver.jp/hello.cgi
<html><body>
Hello, world.<br>
Bonjour le monde.<br>
</body></html>
$ ls -l ~/public_html/message.py
-r-xr-xr-x 1 alice hpusers 565 12 décembre 20:14 /virtual/alice/public_html/message.py
message.py
#!/usr/local/bin/python3
import cgi
import html
import io
import sys
#Spécifiez le codage des caractères du flux de sortie
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
#Obtenir la valeur du paramètre de message
form = cgi.FieldStorage()
message = form.getfirst('message', 'Hello, world.')
#En-tête HTTP
print('Content-Type: text/html; charset=utf-8')
print() # blank line, end of headers
#Corps HTML
print('<html><body>')
print(f'message: {html.escape(message)}') #Sortie et sortie HTML
print('</body></html>')
$ curl http://alice.b1.coreserver.jp/message.py?message=%E7%BD%AA%E3%81%A8%C3%97
<html><body>
message:Péché et ×
</body></html>
Cette fois, installez les packages NumPy et Matplotlib dans le répertoire ~ / my-space.
$ python3 -m pip install numpy matplotlib --target ~/my-space
Le package est installé dans le répertoire ~ / my-space.
$ 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 décembre 01:53 /virtual/alice/public_html/draw.py
draw.py
#!/usr/local/bin/python3
import io
import sys
#Ajouter le chemin de la bibliothèque au chemin de recherche du module
sys.path.append('../my-space')
#Charger NumPy et Matplotlib
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
#Créer des données
x = np.arange(0, 6, 0.1) #0 à 6 0.Générer par incréments de 1
y1 = np.sin(x)
y2 = np.cos(x)
#Dessiner un graphique
plt.figure(figsize=(4, 3), dpi=160) #Taille de l'image
plt.plot(x, y1, label='sin')
plt.plot(x, y2, linestyle = '--', label='cos') #Dessiner avec des lignes brisées
plt.xlabel('x') #étiquette de l'axe des x
plt.ylabel('y') #étiquette de l'axe y
plt.title('sin & cos') #Titre
plt.legend() #Guide d'utilisation
#Générer une chaîne d'octets d'image PNG
image = io.BytesIO()
plt.savefig(image, format='png')
image.seek(0)
#En-tête HTTP
sys.stdout.buffer.write(b'Content-Type: image/png\n\n')
#Données binaires d'image de sortie
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
Un fichier.png a été enregistré.
Recommended Posts