difficult than filling out the input page here is part of the reply page generated for the "guidorecord' display of figure - (use your browser' "view page sourceoption to see this for yourselfnote how the characters are translated to html escapes with cgi escape before being inserted into the replykey name age job pay as usualthe standard library urllib module package comes in handy for testing our cgi scriptthe output we get back is raw htmlbut we can parse it with other standard library tools and use it as the basis of server-side script regression testing system run on any internet-capable machine we might even parse the server' reply fetched this way and display its data in client-side gui coded with tkinterguis and web pages are not mutually exclusive techniques the last test in the following interaction shows portion of the error message page' html that is produced when the action is missing or invalid in the inputswith line breaks added for readabilityfrom urllib request import urlopen url urlopen(urlread( '\npeople input form\ \ \ \ key\ name\ < more deleted urlopen(' '\npeople input form\ \ \ \ key\ name\ age\ more deleted in factif you're running this cgi script on "localhost,you can use both the last section' gui and this section' web interface to view the same physical shelve file-these are just alternative interfaces to the same persistent python objects for comparisonfigure - shows what the record we saw in figure - looks like in the guiit' the same objectbut we are not contacting an intermediate serverstarting other scriptsor generating html to view it and as beforewe can always check our work on the server machine either interactively or by running scripts we may be viewing database through web browsers and guisbutultimatelyit is just python objects in python shelve fileimport shelve db shelve open('class-shelve'db['sue'name 'sue smithstep adding web interface