###前提・実現したいこと
pythonでインタプリタ的な振る舞いをするウェブソフトを作っています。
ユーザーに入力してもらったテキストをhtmlからサーバーに飛ばして実行してます。
テキストをexecで読ませて外部ファイルに保存、保存したものを開いてprint という流れを作ったのですが、
execがテキストを読んでくれません。
exec (関数名) ではダメなんでしょうか。
どうしたらユーザーの入力したソースを実行できるでしょうか。
超初歩的な質問をしてすみません。どうぞ宜しくお願い申し上げます。
###発生している問題・エラーメッセージ
32 text = original_text 33 sys.stdout = open("strage.txt","w") 34 exec text #ここがcgitbでハイライトされてます 35 sys.stdout.close() 36 sys.stdout = sys.__stdout__ <type 'exceptions.NameError'>: name 'asd' is not defined args = ("name 'asd' is not defined",) message = "name 'asd' is not defined"
###該当のソースコード
Python 2.7.5 #!/usr/bin/env python # -*- coding: UTF-8 -*- import sys import json import cgi from datetime import datetime import cgitb cgitb.enable() html_body = u""" <html><head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> </head> <body> %s </body> </html>""" form = cgi.FieldStorage() form_ok = 0 if form.has_key("source") : form_ok = 1 if form_ok == 0 : print "ERROR" else : original_text = form["source"].value original_text = unicode(original_text,"utf-8") #ここです------------------------------- text = original_text sys.stdout = open("strage.txt","w") exec text sys.stdout.close() sys.stdout = sys.__stdout__ open("strage.txt","r").read() #ここまでです多分------------------------ f = open("strage.txt","r") content = f.read() + "asdhf" #for content in open("strage.txt","r") print "Content-type: text/html;charset=utf-8\n" print print (html_body % content).encode('utf-8')
###試したこと
exec str(text)とか。
execに文字列を読ませるとasdhfだけ出力はされます。
あと、strage.txtのなかにはなにも書き込まれません。
###補足情報(言語/FW/ツール等のバージョンなど)
python 2.7.5
サーバーはありますが管理者じゃないのでよくわかりません。
"source"はhtmlのtextareaの名前です。同じ形で別のプログラムが動くので、テキストの入力システムに問題は無いと思われます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/06/15 13:03
2016/06/15 13:31