display messages in python shell

K

koutoo

Is it possible to display messages in the python shell? I want to
display error messages based on parameters in my scripts to the
users. Is there another way to display messages other than log
files? Thanks.

Kou
 
J

Jens

Is it possible to display messages in the python shell? I want to
display error messages based on parameters in my scripts to the
users. Is there another way to display messages other than log
files? Thanks.

Kou

What about using print? For example:

print "This is a message."
 
B

Bruno Desthuilliers

Jens a écrit :
What about using print? For example:

print "This is a message."

print writes to stdout - which is for normal program outputs. wrt/
errors, you want stderr, ie:

import sys

print >> sys.sdterr, "this is an error message"

HTH
 
J

jose Barcelona

Hi Kou,

I use this in http://cern.ch/test-volunteers...
to redirect error messages... \etc
hope it helps

#!/usr/bin/python
import os
import cgi
import safeeval
import sys
import string
import time
import re
import urllib

class PitonEsFacilException(Exception):
"Base class for all Exception of the python es facil code"
pass

class LanguageDoesNotExistException(PitonEsFacilException):
"Exception raised in case the received 'lang' parameter is non of
'en' or 'es'"
def __init__(self, lang):
self.lang=lang

class WritableObject:
def __init__(self):
self.content = ""
def write(self, string):
#self.content.append(string)
self.content = self.content + string

def display_error(str):
print "%s" % str
sys.exit(0)


def display_syntax_error(e,plang):
if (plang=="es_pi"):
eerr = e.text.replace("\n","")
langdict = init_dictionary("en->es")
for key in langdict:
eerr = eerr.replace(key, langdict[key])
print("ERROR SINTACTICO")
print("Revise la linea %s" % e.lineno)
print(" %s " % eerr)
elif (plang=="en_pi"):
eerr = e.text.replace("\n","")
langdict = init_dictionary("en->es en_pi")
for key in langdict:
eerr = eerr.replace(key, langdict[key])
print("SYNTAX ERROR")
print("Chec kline %s" % e.lineno)
print(" %s " % eerr)
elif (plang=="en_py"):
print("SYNTAX ERROR")
print("Check line %s" % e.lineno)
print(" %s " % e.text.replace("\n",""))
else:
raise LanguageDoesNotExistException(lang)

print(string.rjust("^",e.offset+3))
return e.text

def display_name_error(e,plang):

saveout = sys.stdout
foo = WritableObject() # a writable object
sys.stdout = foo
print e
sys.stdout = saveout

eerr = foo.content

if (plang=="es_pi"):
langdict = init_dictionary("en->es")
for key in langdict:
eerr = eerr.replace(key, langdict[key])
print "ERROR DE NOMRE: "+ eerr
elif (plang=="en_pi"):
langdict = init_dictionary("en->es en_pi")
for key in langdict:
eerr = eerr.replace(key, langdict[key])
print "NAME ERROR: "+ eerr
elif (plang=="en_py"):
print "NAME ERROR: " + eerr

else:
raise LanguageDoesNotExistException(lang)

return foo.content

def add_trial(form, outcome):
email = form["email"].value
code = form["code"].value
now = time.time()
logrecord = email + ","
logrecord += str(now) + ","
logrecord += time.strftime("%Y/%m/%d %H:%M:%S %Z",
time.localtime(now)) + ","
logrecord += str(outcome) + "\n"
#logrecord += str(output_window) + ","
#logrecord += str(code_window) + "\n"

f=open("log/trials.log", "a")
f.write(logrecord)
f.close()


def main():


print "Content-type: text/html\n\n"

form = cgi.FieldStorage()
# print form.keys()

code = form["code"].value
lang = form["lang"].value
plang = form["plang"].value

outcome="nodef"
output="nodef"

if (plang=="es_pi" or plang =="en_pi"):
langdict = init_dictionary("es->en")
for key in langdict:
code = code.replace(key, langdict[key])

if code.count("\r\n") > 0:
code = code.replace("\r\n","\n")

try:
safeeval.safe_eval(code)

saveout = sys.stdout
# example with redirection of sys.stdout
foo = WritableObject() # a writable object
sys.stdout = foo
safeeval.safe_eval(code)
output = foo.content
sys.stdout = saveout

except SyntaxError,e:
output = display_syntax_error(e,plang)
outcome = "XS"

except NameError,e:
output = display_name_error(e,plang)
outcome = "XN"

outcome = outcome + "," + urllib.quote(output) + "," +
urllib.quote(code)
add_trial(form,outcome)


def init_dictionary(lang):
if lang == "es->en":
mydict = {'imprime ':'print ','para_cada ':'for ','si ':'if
','en ': 'in ','sino:': 'else:','longitud(':'len('}
return mydict
elif lang == "en->es":
mydict = {'is not defined':'no esta
definido','name':'nombre','print ':'imprime ','for ':'para_cada ','if
':'si ','in ': 'en ','else:': 'sino:','len': 'longitud('}
return mydict
elif lang == "en->es en_pi":
mydict = {'print ':'imprime ','for ':'para_cada ','if ':'si
','in ': 'en ','else:': 'sino:','len': 'longitud('}
return mydict

raise LanguageDoesNotExistException(lang)

if __name__ == "__main__":

sys.stderr = sys.stdout
try:
main()
except KeyError,e:
display_error("Parameter not found in the HTTP request")
except LanguageDoesNotExistException, e:
display_error("\"lang\" parameter with value '%s' is not
allowed" % e.lang)
except safeeval.SafeEvalException:
display_error("SafeEvalError, This is a place holder for not
allowed usage of methods")
except SyntaxError,e:
display_error(e)
except Exception,e:
display_error(e)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,995
Messages
2,570,231
Members
46,820
Latest member
GilbertoA5

Latest Threads

Top