さくらインターネット上、別ファイルのインポートをするときにはまったのでメモ。
原因を調査するためプログラムをできるだけ単純化して以下のようにしてもエラーが発生した。
test.cgi
#!/usr/local/bin/python # -*- coding: utf-8 -*- import cgi import cgitb import test2 cgitb.enable() print "Content-Type: text/html\n" print """ <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> %s </body> </html>""" % test2.aaa()
やってることは import test2 で test2.cgi をインポートして test2.aaa() (文字列"abc"を返すだけの関数)を実行するだけ内容はこんな感じ。
test2.cgi
def aaa(): return 'abc'
これでエラーとなります。
いろいろと試行錯誤した結果原因は
インポートするファイルの拡張子は py でないといけない
というものでした。ようするにこういうことです。
呼び出し側 | test.cgi(ブラウザから呼ばれるファイルの拡張子は cgi ) |
---|---|
呼び出される側 | test2.py(importで取り込まれるファイルの拡張子は py ) |
なかなかのはまり要素でした(さくらさん。cgiとpyどっちも使えるようにしてくださーい(涙))