質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

10151閲覧

PythonでcgiのHello World

taro_nii_chan

総合スコア207

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2016/09/08 00:32

  • 環境

Mac OSX 10.11.6 El Capitan
MAMP 4.0.1
Apache/2.2.31
Python 3.5.2

  • やりたい事

Apache上でPythonをcgiとして使いたい。

  • 困っていること

500 Internal Server Errorが表示される

  • やった事

MAMP 4.0.1 をインストールし、
httpd.conf

AddHandler cgi-script .cgi .pl

AddHandler cgi-script .cgi .pl .py

に書き換え、Apacheを再起動しました。

/Applications/MAMP/htdocs/python/index.py

Python

1#!/usr/bin/env python 2# -*- coding: UTF-8 -*- 3 4# enable debugging 5import cgitb 6cgitb.enable() 7 8print("Content-Type: text/plain;charset=utf-8") 9print() 10 11print("Hello World!")

というスクリプトを作成し、ブラウザで
http://localhost/python/index.py
を確認すると
500 Internal Server Error
になります。

ターミナルで

bash

1$ python /Applications/MAMP/htdocs/python/index.py

を実行すると

Content-Type: text/plain;charset=utf-8 Hello World!

と表示されます。

pythonのバージョンは
ターミナルでは
Python 3.5.2
ですが、
phpinfo();
では
Python/2.7.12
と表示されています。

index.pyの1行目を

Python

1#!/usr/bin/python2.7

に変えても結果は同じでした。

何がいけないのでしょう?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

apache_error.logを見たら
[Thu Sep 08 11:09:01 2016] [error] [client ::1] malformed header from script. Bad header=(): index.py
と言うエラーが吐き出されていました。
これを元にググった結果、
Pythonのバージョンは2系で動いていて、

Python

1print("Content-Type: text/plain;charset=utf-8")

Python

1print("Content-Type: text/plain;charset=utf-8\n\n")

と書き換えることで

() Hello World!

と表示されるようになりました。

何故2系が動いているのかはもう少し調べ、
分からなかったら別の質問としてお知恵を拝借することにします。


追記
https://www.python.org/downloads/
から改めてPython 3をインストールし直し、
index.pyの1行目を

Python

1#!/usr/local/bin/python3

とすることで

Hello World!

と表示されるようになりました。

index.py

Python

1#!/usr/local/bin/python3 2# -*- coding: UTF-8 -*- 3 4# enable debugging 5import cgitb 6cgitb.enable() 7import sys 8 9print("Content-Type: text/plain;charset=utf-8") 10print() 11 12print("Hello, world!") 13print(sys.version)

<TITLE>CGI script output</TITLE> <H1>This is my first CGI script</H1> Hello, world! 3.5.2 (v3.5.2:4def2a2901a5, Jun 26 2016, 10:47:25) [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)]

と確かにPython 3が動いているのを確認済みです。

ただ、htmlタグがそのまま文字列として表示されていることに関してはまだ不明なので、
調べて分からなかったらまたお知恵を拝借します。

投稿2016/09/08 02:19

編集2016/09/08 03:05
taro_nii_chan

総合スコア207

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

taro_nii_chan

2016/09/08 03:24

タグが表示されるのはヘッダで print("Content-Type: text/plain;charset=utf-8") とtext/plainとしているからでした。 text/htmlでちゃんとマークアップされた出力になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問