AB型技術系 主に備忘録

ほぼプログラム関連の備忘録

スターサーバーでPythonをテストした時のこと

スターサーバーでPythonで実装したページを表示させた時のメモです

スターサーバーでPythonが使えるのか?

以下のリンク先に掲載されてますが、2.7.x、3.4.x、3.6.xが使えるようです

www.star.ne.jp

.htaccessの作成

Pythonで実装したプログラムをCGIスクリプトとして扱うために
.htaccessを作成し以下を追記する

AddHandler cgi-script .py
DirectoryIndex index.php index.html index.py

2行目はindex.pyをデフォルトドキュメントにするための設定

サンプルプログラム1

#!/usr/bin/python3.6

print("Content-Type: text/html; charset=utf-8")
print("<html><meta charset='utf-8'><body>")
print("<h1>テストページ</h1>")
print("</body></html>")

サーバーにアップロード

f:id:freelancer13:20210910010014p:plain
サーバーのルートディレクト

実行権限与えないと500エラーが発生するみたいなので権限を付与してます

この状態でindex.pyにアクセスしてみると・・・

f:id:freelancer13:20210910011738p:plain
スターサーバー 500エラー

500エラーが発生
改行コードはLFでないと500エラーが発生するという情報があったのでCRLFからLFに変えて再度試すも解消せず

サンプルプログラム2

#!/usr/bin/python3.6

print("Content-Type: text/html; charset=utf-8\n")
print("<html><meta charset='utf-8'><body>")
print("<h1>テストページ</h1>")
print("</body></html>")

Content-Typeの最後に改行がないと500エラーが発生するという情報があったので改行を追加

この状態でindex.pyにアクセスしてみると・・・

f:id:freelancer13:20210910021826p:plain
真っ白画面

500エラーは発生しないが真っ白

ソースを確認してみると

f:id:freelancer13:20210910022044p:plain
ソース

body以降が出力されていない

怪しいのは日本語出力か?

ということでまたまた修正

サンプルプログラム3

#!/usr/bin/python3.6

print("Content-Type: text/html; charset=utf-8\n")
print("<html><meta charset='utf-8'><body>")
print("<h1>aaa</h1>")
print("</body></html>\r\n")
f:id:freelancer13:20210910023100p:plain
半角英字の出力確認

やはり日本語が問題でした

標準出力をエンコードすれば日本語が出力できるようになるみたいなので修正

サンプルプログラム3

#!/usr/bin/python3.6

import sys, io

sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding = 'utf-8')

print("Content-Type: text/html; charset=utf-8\n")
print("<html><meta charset='utf-8'><body>")
print("<h1>テストページ</h1>")
print("</body></html>")
f:id:freelancer13:20210910024247p:plain
日本語出力の確認

日本語が出力されました。

まとめ

  • ソースの改行コードはLFにする
  • Content-Typeの最後には改行が必要
  • 日本語を出力するには標準出力をエンコードする

次はPythonフレームワークを使えるようにしたいと思います。