[Tutor] Translating to Python [perl --> python]

Kyle Babich Kyle Babich" <kb@kb5.org
Mon, 1 Jul 2002 22:10:02 +0000


Thank you, that's just what I was looking for.  I like it, err... one
problem, my server doesn't.     505

Results of python -c index.py

Traceback (innermost last):
  File "<string>", line 1, in ?
NameError: index


Exactly what index.py says:

#!/usr/bin/python

import cgi

import cgitb
cgitb.enable()

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

form = cgi.FieldStorage()
	c = cgi['c'].value
	content = 'c'
		if c == 'abc':
    		content = "abc123"
		elif c == 'def':
    		content = "def456"
		else:
		print "error: content failed\n"

file = open("text.txt")
	text = file.read()
file.close()

print """

%(content)s

<br>&nbsp;<br>&nbsp;<br>&nbsp;

%(text)s

""" % vars()

On Mon, 1 Jul 2002 14:50:23 -0700 (PDT), "Danny Yoo"
<dyoo@hkn.eecs.berkeley.edu> said:
> 
> 
> On Mon, 1 Jul 2002, Kyle Babich wrote:
> 
> > Could someone show me how to translate this to python from perl?
> 
> Hi Kyle,
> 
> Welcome!  Let's see what a translation might look like between Perl and
> Python.
> 
> 
> 
> > #!/usr/bin/perl -wT
> > use strict;
> 
> Python is always in "strict" mode in a sense --- anything bad that
> happens
> will raise an Exception.  Python's magic line will probably look like:
> 
> #!/usr/bin/env python
> 
> 
> 
> 
> 
> > use CGI qw/ :standard /;
> 
> In Python, module importing is done through the 'import' keyword. 
> Python
> does have a 'cgi' module, so we can do:
> 
> ###
> import cgi
> ###
> 
> with similar effects.
> 
> See:
> 
>     http://www.python.org/doc/lib/module-cgi.html
> 
> for more details on the 'cgi' module.
> 
> 
> 
> By the way, Python provides a really nice debugging module called
> 'cgitb'
> that prints out a nice traceback if there are bugs in the module. 
> Rather
> than get a rude 'Internal Server Error', we can have our Python script
> display a nicely formatted error page by doing:
> 
> ###
> import cgitb
> cgitb.enable()
> ###
> 
> 
> 
> 
> > print header ( 'text/html' );
> 
> I don't know if the Python cgi module has a header() utility function,
> but
> we can do this for a similar effect:
> 
> ###
> print "Content-type: text/html\n\n"
> ###
> 
> 
> 
> 
> > my $c = param('c');
> > my $content = "c";
> > 	if ($c eq "abc") {
> > 		$content = qq{abc123};
> > 	} elsif ($c eq "def") {
> > 		$content = qq{def456};
> > 	} else {
> > 		print "error:  content failed\n";
> > 	}
> 
> 
> Python's cgi module provides an object that we use to pull out
> parameters.
> Here's what it might look like:
> 
> ###
> form = cgi.FieldStorage()
> c = cgi['c'].value
> content = 'c'
> if c == 'abc':
>     content = "abc123"
> elif c == 'def':
>     content = "def456"
> else:
>     print "error: content failed\n" ## shouldn't we raise an error
>     here?
> ###
> 
> 
> 
> 
> 
> > open(TEXT,"text.txt") or die ("error:  text.txt failed\n");
> > 	my $text = <TEXT>;
> > close(TEXT) or die("error:  close text.txt failed\n");
> 
> 
> File opening in Python implicitly raises an IOError if bad things
> happen,
> so the "die" part is implied.
> 
> ###
> file = open("text.txt")
> text = file.read()
> file.close()
> ###
> 
> 
> 
> > print <<"EndOfHTML";
> >
> > $content
> >
> > <br>&nbsp;<br>&nbsp;<br>&nbsp;
> >
> > $text
> >
> > EndOfHTML
> 
> Python provides a string formatting operation that can span across
> several
> lines:
> 
> ###
> print """
> 
> %(content)s
> 
> 
> <br>&nbsp;<br>&nbsp;<br>&nbsp;
> 
> %(text)s
> 
> """ % vars()
> ###
> 
> 
> 
> 
> 
> Let's put everything together to see what the final product looks like.
> I'll do a little rearrangement to make the program flow a little nicer:
> 
> ###
> # Translation of Kyle's Perl program into Python
> import cgi
> import cgitb
> cgitb.enable()
> 
> 
> form = cgi.FieldStorage()
> c = cgi['c'].value
> content = 'c'
> if c == 'abc':
>     content = "abc123"
> elif c == 'def':
>     content = "def456"
> else:
>     print "error: content failed\n"
> 
> file = open("text.txt")
> text = file.read()
> file.close()
> 
> 
> print "Content-type: text/html\n\n"
> print """
> 
> %(content)s
> 
> 
> <br>&nbsp;<br>&nbsp;<br>&nbsp;
> 
> %(text)s
> 
> """ % vars()
> ###
> 
> 
> This is still a little awkward as far as Python programs go --- I'd
> like
> to break things down into separate functions to make the code's intent
> clearer, and to avoid having global variables spill out everywhere.
> 
> 
> Hope this helps!
> 
> 
> 
>