Results 1 to 17 of 17
Thread: phpinfo() alternative in Python
-
07-28-2007, 12:09 PM #1Web Hosting Master
- Join Date
- Sep 2005
- Location
- India
- Posts
- 778
phpinfo() alternative in Python
Hi,
I am hosted on HostGator and need a Python script to test the Python support on my shared account.
Is there something similar to phpinfo() in Python?
Thanks,
JatinderDarshWebSolutions.com : Web Design, PHP Development, E-Commerce Solutions
PDF-ace.com : HTML to PDF API
-
07-28-2007, 01:35 PM #2Web Hosting Master
- Join Date
- Jul 2003
- Location
- Kuwait
- Posts
- 5,104
Not sure of one like phpinfo(), but str(request.environ) should come close.
-
07-28-2007, 01:49 PM #3Web Hosting Master
- Join Date
- Sep 2005
- Location
- India
- Posts
- 778
I know nothing about Python. Can you give me the full script?
DarshWebSolutions.com : Web Design, PHP Development, E-Commerce Solutions
PDF-ace.com : HTML to PDF API
-
07-28-2007, 05:20 PM #4Web Hosting Master
- Join Date
- Nov 2001
- Location
- Vancouver
- Posts
- 2,422
There is nothing directly comparable to phpinfo() - much of what that function returns is PHP settings related to the web app integration components.
Here - I cooked this up for you:
Code:#!/usr/local/bin/python # Intentionally not using /usr/bin/env python # Why: /usr/local/bin is not passed to CGI scripts by a number of OS # thus env would be unable to find python. """ $URL$ $Id$ pyinfo - A quick look at your Python environment. """ import os import pkgutil import pprint import sys from cgi import escape def dl(tuples): output = u'' output += '<dl>\n' for title, description in tuples: if title: output += ' <dt>%s</dt>\n' % escape(title) if description: output += ' <dt>%s</dt>\n' % escape(description) output += '</dl>\n' return output def group(seq): """(seq:(item, category)) -> {category:items} Groups items by supplied category, e.g.: group((e, e.tags[0]) for e in journal.get_recent_entries(100)) Lifted from http://aspn.activestate.com/ASPN/Coo.../Recipe/498223 """ result = {} for item, category in seq: result.setdefault(category, []).append(item) return result def get_packages(): return set([modname for importer, modname, ispkg in pkgutil.walk_packages(onerror=lambda x:x) if ispkg and '.' not in modname]) def format_packages(): packages = group((pkg, pkg[0].lower()) for pkg in get_packages()) # convert ('a',['apackage','anotherapackage]) into ('a', 'apackage, anotherapackage') packages = [(letter, ', '.join(pkgs)) for letter, pkgs in packages.items()] return '<h2>Installed Packages</h2>\n%s' % dl(sorted(packages)) def format_environ(environ): return '<h2>Environment</h2>\n%s' % dl(sorted(environ.items())) def format_python_path(): # differentiate between eggs and regular paths eggs = [p for p in sys.path if p.endswith('.egg')] paths = [p for p in sys.path if p not in eggs] return dl([('Paths', ',\n'.join(paths)), ('Eggs', ',\n'.join(eggs)), ]) def format_version(): version, platform = sys.version.split('\n') sysname, nodename, release, osversion, machine = os.uname() return '<h2>Version</h2>\n%s' % dl([ ('Python Version', version), ('Build Platform', platform), ('OS', sysname), ('OS Version', osversion), ('Machine Type', machine),]) def format(): output = u'' output += '<h1>Python Info</h1>\n' output += format_version() output += format_python_path() output += format_environ(os.environ) output += format_packages() return output def page(html): print "Content-type: text/html" print print '<html>\n<head><title>%s Python configuration</title></head>' % os.uname()[1] print '<body>\n%s</body>\n</html>' % html if __name__ == '__main__': page(format())
“Even those who arrange and design shrubberies are under
considerable economic stress at this period in history.”
-
07-28-2007, 05:54 PM #5Web Hosting Master
- Join Date
- Nov 2001
- Location
- Vancouver
- Posts
- 2,422
While you are at it, you might want to look at pydoc.
/usr/local/bin/pydoc2.5 -h
Try it.“Even those who arrange and design shrubberies are under
considerable economic stress at this period in history.”
-
07-29-2007, 01:04 AM #6Web Hosting Master
- Join Date
- Sep 2005
- Location
- India
- Posts
- 778
Thanks for the reply mwatkins. I uploaded the script to my document root and called it from the browser.
I just get the code of the script back.
I then uploaded it to cgi-bin directory where it gave me a 500 internal server error.
How do I run this script?
I joined HG two years back when they didn't offer Python support and not sure if I have python enabled on my account. But their tech support says that Python is enabled.DarshWebSolutions.com : Web Design, PHP Development, E-Commerce Solutions
PDF-ace.com : HTML to PDF API
-
07-29-2007, 02:42 AM #7Web Hosting Master
- Join Date
- Jul 2003
- Location
- Kuwait
- Posts
- 5,104
Ask them how its enabled, through cgi or through mod_python (likely through mod_python).
If I recall correctly, for mod_python you need to setup a section in .htaccess (or httpd.conf) to enable the handler for your scripts; this is a snippet from one of my servers:
Code:<Location /py> SetHandler mod_python PythonHandler mod_python.publisher PythonDebug On </Location>
-
07-29-2007, 04:20 AM #8Web Hosting Master
- Join Date
- Nov 2001
- Location
- Vancouver
- Posts
- 2,422
The script itself uses all standard modules so my guess its a typical CGI issue -- I suspect its a path problem or file ownership and/or permissions issue (don't forget +x!) - you might try which python (does which exist on Linux? I can't remember). And/or check your httpd error log - it will undoubtedly show what is wrong.
While HG might enable mod_python as well, I would endeavor to make it work as CGI first.
Re fyrestrtr's comment - Pylons and Turbogears too IIRC have fantastic debugging output - very nice stuff. I'll have a look at their code when I have a few minutes and see if I can't borrow from it. In the meantime I cooked up something cheap and dirty.
I've never missed phpinfo() -- Unlike PHP you don't tend to need to go peering into Python to see if X,Y, or Z switch was enabled during compilation. Typically during a build the major choices are include threading or not, and pick what flavour of unicode support you want. All additional support is done through userland-installable packages. Typically the Python interpreter on the machine just works, with perhaps a little more futzing about - not too much - to make mod_python or mod_scgi or the like work with your web httpd of choice.
But proper tracebacks are a big help; some of the frameworks go way beyond mere tracebacks (which were already good and informative) and allow you to examine variables at the time of the exception, all through a web interface. Pretty slick.“Even those who arrange and design shrubberies are under
considerable economic stress at this period in history.”
-
07-29-2007, 09:31 AM #9WHT Addict
- Join Date
- May 2002
- Location
- Norway
- Posts
- 122
There is a function in the cgi module that will output some basic information about the environment, not totally unlike phpinfo(). But it will not give any detailed infomration about the Python installation, mwatkins' script looks better for that.
Code:#!/usr/bin/python import cgi cgi.test()
Code:AddHandler cgi-script .py
Good Web Hosting Info - Information about web hosting
-
07-29-2007, 01:27 PM #10Web Hosting Master
- Join Date
- Nov 2001
- Location
- Vancouver
- Posts
- 2,422
Installing a CGI script - doesn't cover OS specifics:
http://docs.python.org/lib/node565.html
Some helpful tips when running into problems:
http://docs.python.org/lib/node568.html
Here's an update to the script to fix a typo with the dl() function and add a little CSS, as well as parsing a query string to include or exclude the package scan.
http://64.21.147.49/examples/cgi/pyinfo.py
This is just an example of Python and a little CGI... I have to stress that I never use the CGI module; most Python frameworks interact at a much higher level than that.“Even those who arrange and design shrubberies are under
considerable economic stress at this period in history.”
-
07-30-2007, 12:41 AM #11Web Hosting Master
- Join Date
- Sep 2005
- Location
- India
- Posts
- 778
I got this code posted by "fish" working from my CGI bin and public directory. But still no luck with mwatkins's code.
Code:#!/usr/bin/python import cgi cgi.test()
I have to stress that I never use the CGI module; most Python frameworks interact at a much higher level than that.DarshWebSolutions.com : Web Design, PHP Development, E-Commerce Solutions
PDF-ace.com : HTML to PDF API
-
08-01-2007, 04:42 AM #12Web Hosting Master
- Join Date
- Jul 2003
- Location
- Kuwait
- Posts
- 5,104
Can you explain that a little more?
PHP does this in the background for you (sending out appropriate headers). A user-agent cannot display any document unless it has appropriate headers. In CGI programming, your code must generate these headers (like the Content-Type header). PHP, does this for you automatically. Once you start programming in 'raw' CGI in Python (or Perl, or C, or any other language) you have to do this for yourself. Frameworks make this task very easy by automating it for you.
Take the classic 'hello world' example:
PHP Code:<?php
echo 'Hello world!';
?>
Code:$ telnet localhost 80 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. GET /test.php HTTP1/1.1 HTTP/1.1 200 OK Date: Wed, 01 Aug 2007 08:08:47 GMT Server: Apache/2.2.3 (Ubuntu) mod_python/3.2.10 Python/2.5.1 PHP/5.2.1 X-Powered-By: PHP/5.2.1 Content-Length: 12 Connection: close Content-Type: text/html; charset=UTF-8 hello world!
Most Python frameworks have the following components; each dealing with a different aspect of web development:
1. A presentation layer (the template engine)
2. A ORM/middleware layer (the thing that connects to the databases)
3. A url mapper (something that points URLs to specific code)
Examples:
1. There are many template engines but the most popular ones are Myghty, Mako, Genshi, Kid (used by TurboGears) and Cheetah. In PHP an example would be Smarty.
2. The two main ones are SQLAlchemy and SQLObject. There really aren't robust ORM layers in PHP, but Creole is one that I have experience with, and others include PEAR::MDB2 and PDO.
3. Routes is the only one I really know of in this space. I don't know of many in PHP (honestly, before jumping into Python development, I wasn't aware of this concept of routes) -- symfony has something similar to a URL mapper which is XML based.
There are other things in Python web development that make life easy; but as I am myself trying to understand all the tools and libraries, I cannot speak with authority on the subject. Bottom line is, you have to think a bit differently once you start web development in Python; so it takes a bit of getting used to if you are a PHP programmer.Last edited by Burhan; 08-01-2007 at 04:45 AM.
-
08-01-2007, 02:53 PM #13WHT Addict
- Join Date
- May 2002
- Location
- Norway
- Posts
- 122
It might be the different shebang-line (#!usr/bin/...). Check your error logs for any signs of what is going wrong. You can also add
Code:import cgitb cgitb.enable()
Good Web Hosting Info - Information about web hosting
-
08-01-2007, 03:15 PM #14Web Hosting Master
- Join Date
- Sep 2005
- Location
- India
- Posts
- 778
Thanks for the explanation fyrestrstr. I knew about CGI and headers, but wasn't aware of how Python worked and how it is different from PHP.
I just can't shake the PHP mindset
I guess it will take me sometime to pick up Python.DarshWebSolutions.com : Web Design, PHP Development, E-Commerce Solutions
PDF-ace.com : HTML to PDF API
-
08-02-2007, 11:00 AM #15Web Hosting Master
- Join Date
- Nov 2001
- Location
- Vancouver
- Posts
- 2,422
I can appreciate that; when I first started looking at Python it was not for a web project but it appealed to me so much I had to figure out how to use it for the web ... wasn't nearly as easy back then as it is now.
If you just remember that out of the box, PHP has a web framework built in, and Python doesn't, that goes a long way to explaining that you need to either a) build your own framework (that "page" function I wrote in the script above is a mini framework in a manner of speaking) or b) adopt someone else's. I'd opt for what's behind box B if I were you and start down the road with one of the popular Python frameworks.
If your development platform is *nix, then you have a big selection to pick from and already have the skills to get a platform installed and minimally functional.
If your development platform is Windows, I think your best bet is to adopt the framework with the largest overall community (Django seems to be the leader here) and start there. Here's a couple of links to get you to "hello, world":
Note -- I think using sqlite to make it simple would be the way to go initially - Django, and virtually all common Python frameworks, comes with its own built-in web server so with sqlite in development mode you don't have to install any other "server" processes, which makes things easy. sqlite is supported natively in Python these days.
Django docs themselves:
http://www.djangoproject.com/documentation/install/
A quick sampling from around the web:
Django / sqlite:
http://ymasuda.jp/python/djhttp://ym...llation_e.html
Django / Postgresql:
http://thinkhole.org/wp/django-on-windows/
Using exemaker:
http://effbot.org/zone/django.htm“Even those who arrange and design shrubberies are under
considerable economic stress at this period in history.”
-
08-12-2010, 06:26 AM #16New Member
- Join Date
- Aug 2010
- Posts
- 1
For those people coming from google looking for a solution, you can find a working version of pyinfo() here:
http:bran.name/articles/pyinfo-a-good-looking-phpinfo-like-python-script
-
08-12-2010, 03:25 PM #17New Member
- Join Date
- Aug 2010
- Location
- New Delhi, India
- Posts
- 4