3

I am beginner in python web development. So, I quickly did all the set up for running cgi scripts in my ubuntu 14.04 OS. I kept hello.py in /var/www/ but when I run that in browser it doesn't look as expected.

enter image description here

Here is 000-default.conf from /etc/apache2/sites-available/

<VirtualHost *:80>
    # The ServerName directive sets the request scheme, hostname and port that
    # the server uses to identify itself. This is used when creating
    # redirection URLs. In the context of virtual hosts, the ServerName
    # specifies what hostname must appear in the request's Host: header to
    # match this virtual host. For the default virtual host (this file) this
    # value is not decisive as it is used as a last resort host regardless.
    # However, you must set it for any further virtual host explicitly.
    #ServerName www.example.com

    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/

        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
                AddHandler mod_python .py
                PythonHandler mod_python.publisher
                PythonDebug On
        </Directory>


       <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
                AddHandler mod_python .psp
                PythonHandler mod_python.psp
                PythonDebug On
        </Directory>



    # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
    # error, crit, alert, emerg.
    # It is also possible to configure the loglevel for particular
    # modules, e.g.
    #LogLevel info ssl:warn

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    # For most configuration files from conf-available/, which are
    # enabled or disabled at a global level, it is possible to
    # include a line for only one particular virtual host. For example the
    # following line enables the CGI configuration for this host only
    # after it has been globally disabled with "a2disconf".
    #Include conf-available/serve-cgi-bin.conf
</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

Here are the enabled mods:

enter image description here

Hello.py file:

#!/usr/bin/python

print '<html>'
print '<head>'
print '<title>Hello Word - First CGI Program</title>'
print '</head>'
print '<body>'
print '<h2>Hello Word! This is my first CGI program</h2>'
print '</body>'
print '</html>'

3 Answers 3

3

As @Skywrath indicated, you do need to print your headers before any content. In addition to this, add a CGI handler for python files in the .htaccess file in /var/www/, like so:

AddHandler cgi-script .cgi .py
Options +ExecCGI 
Sign up to request clarification or add additional context in comments.

7 Comments

Except, it is generally considered bad practice and is not advisable to include executable scripts within your document directory... at least until such time as you really understand what you are doing. I'd start using a script directory, instead (ie. See Apache: Tutorial: Dynamic Content with CGI, first.
@RVT If it were me, I would be using a Python web framework (OP, if you're interested, try Pyramid) rather than just raw CGI. I was just solving OP's problem.
@DarthVader I don't have any .htaccess file in var/www/ should i create one? What should be the name & permissions for that file?
Fair enough, @Darth... though, Frameworks being what they are, my current python fascination (other than a much more robust django) is the Flask micro-framework.
@androidplusios.design Yes, you need to create the .htaccess file, it doesn't exist by default. Read more here.
|
1

You need to indicate this page is plain HTML file by adding the following line at the top of your HTML code, even before . For example:

 print 'Content-type: text/html'
 print #An empty line is needed between the previous line and your HTML code
 print '<html>'
 ...
 print '</html>'

2 Comments

No effect, Now I see #!/usr/bin/python print 'Content-type: text/html' print '' print '' print '' print '' print '' print ' in browser
Again, this is a CGI / handler issue... not a scripting problem. (You should be easily able to demonstrate that by doing a "View Source" in your browser - it should just be a copy of your script)
1

You should look towards moving script in to your CGI directory, rather than your document root, and use ScriptAlias to designate such in your Apache configuration file.

You'll then likely access the script through localhost/cgi-bin/hello.py, instead.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.