By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
425,600 Members | 1,666 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 425,600 IT Pros & Developers. It's quick & easy.

Dynamic HTML from Python Script

P: n/a
I have a python script whose output i want to dynamically display
on a webpage which will be hosted using Apache. How do I do that?
thanks
Jun 27 '08 #1
Share this Question
Share on Google+
14 Replies


P: n/a
asdf wrote:
I have a python script whose output i want to dynamically display
on a webpage which will be hosted using Apache. How do I do that?
thanks
Well, there's a few ways you could approach it.

You could create a cgi program from your script - this is probably the
solution you're looking for.

You could have the script run periodically and create a static html file
in the webroot... this would be acceptable, maybe preferable, if the
output from your script doesn't change frequently.

There's also more advanced ways you can make python code run in a
web-service. Cherrypy comes to mind, as well as the myriad python MVC
frameworks.
Jun 27 '08 #2

P: n/a
Well, there's a few ways you could approach it.
>
You could create a cgi program from your script - this is probably the
solution you're looking for.
Output from the script does come up very often. There is a new output
every 10 secs and it's possible that the script might be run indefinitely.
Basically I want all that output displayed in a web browser
You could have the script run periodically and create a static html file
in the webroot... this would be acceptable, maybe preferable, if the
output from your script doesn't change frequently.
Jun 27 '08 #3

P: n/a
asdf wrote:
>Well, there's a few ways you could approach it.

You could create a cgi program from your script - this is probably the
solution you're looking for.

Output from the script does come up very often. There is a new output
every 10 secs and it's possible that the script might be run indefinitely.
Basically I want all that output displayed in a web browser
Well, in that case you could simply append the new output to a static
file every 10 seconds, or whenever there is new output. That way, you
just need to refresh the static file in your browser to see updates...
Given what I understand of your situation, that's how I'd do it.

A constantly running CGI app is probably not the best idea, given
timeouts and other such constraints you might run into.

>You could have the script run periodically and create a static html file
in the webroot... this would be acceptable, maybe preferable, if the
output from your script doesn't change frequently.
Jun 27 '08 #4

P: n/a
asdf wrote:
I have a python script whose output i want to dynamically display
on a webpage which will be hosted using Apache. How do I do that?
thanks
Take a look at Django. It may be overkill for this first project but any time
you spend learning it should be paid back in future projects.

-Larry
Jun 27 '08 #5

P: n/a
On Wed, 11 Jun 2008 11:20:48 +1000, Aidan wrote:
asdf wrote:
>>Well, there's a few ways you could approach it.

You could create a cgi program from your script - this is probably the
solution you're looking for.

Output from the script does come up very often. There is a new output
every 10 secs and it's possible that the script might be run
indefinitely. Basically I want all that output displayed in a web
browser

Well, in that case you could simply append the new output to a static
file every 10 seconds, or whenever there is new output. That way, you
just need to refresh the static file in your browser to see updates...
Given what I understand of your situation, that's how I'd do it.
The problem with this is that browser would have to be refreshed manually
every 10 seconds. Unless there is a way to set this in the script itself.

A constantly running CGI app is probably not the best idea, given
timeouts and other such constraints you might run into.

>>You could have the script run periodically and create a static html
file in the webroot... this would be acceptable, maybe preferable, if
the output from your script doesn't change frequently.
Jun 27 '08 #6

P: n/a
asdf wrote:
On Wed, 11 Jun 2008 11:20:48 +1000, Aidan wrote:
>asdf wrote:
>>>Well, there's a few ways you could approach it.

You could create a cgi program from your script - this is probably the
solution you're looking for.
Output from the script does come up very often. There is a new output
every 10 secs and it's possible that the script might be run
indefinitely. Basically I want all that output displayed in a web
browser
Well, in that case you could simply append the new output to a static
file every 10 seconds, or whenever there is new output. That way, you
just need to refresh the static file in your browser to see updates...
Given what I understand of your situation, that's how I'd do it.
The problem with this is that browser would have to be refreshed manually
every 10 seconds. Unless there is a way to set this in the script itself.
You should be able to do that with just:

<meta http-equiv="refresh" content="10"/>

in the <headsection of your page (you can adjust the value of content
from 5 to however many seconds you want between refreshes).

You could also look at adding some AJAX-yness to your page, and have it
query your script for new output every 10 seconds, and then add that
content to the existing page... it sounds like this behavior is what
you're looking for, but it's slightly harder to pull off than the method
mentioned above.
>
>A constantly running CGI app is probably not the best idea, given
timeouts and other such constraints you might run into.

>>>You could have the script run periodically and create a static html
file in the webroot... this would be acceptable, maybe preferable, if
the output from your script doesn't change frequently.
Jun 27 '08 #7

P: n/a
Aidan wrote:
asdf wrote:
>On Wed, 11 Jun 2008 11:20:48 +1000, Aidan wrote:
>>asdf wrote:
Well, there's a few ways you could approach it.
>
You could create a cgi program from your script - this is probably the
solution you're looking for.
>
>
Output from the script does come up very often. There is a new output
every 10 secs and it's possible that the script might be run
indefinitely. Basically I want all that output displayed in a web
browser
Well, in that case you could simply append the new output to a static
file every 10 seconds, or whenever there is new output. That way, you
just need to refresh the static file in your browser to see updates...
Given what I understand of your situation, that's how I'd do it.
The problem with this is that browser would have to be refreshed manually
every 10 seconds. Unless there is a way to set this in the script itself.

You should be able to do that with just:

<meta http-equiv="refresh" content="10"/>

in the <headsection of your page (you can adjust the value of content
from 5 to however many seconds you want between refreshes).
To be clear, you can set the content attribute value to any arbitrary
integer value.
>
You could also look at adding some AJAX-yness to your page, and have it
query your script for new output every 10 seconds, and then add that
content to the existing page... it sounds like this behavior is what
you're looking for, but it's slightly harder to pull off than the method
mentioned above.
>>
>>A constantly running CGI app is probably not the best idea, given
timeouts and other such constraints you might run into.
You could have the script run periodically and create a static html
file in the webroot... this would be acceptable, maybe preferable, if
the output from your script doesn't change frequently.
>
Jun 27 '08 #8

P: n/a
On Jun 11, 1:58 am, asdf <a...@asdf.comwrote:
I have a python script whose output i want to dynamically display
on a webpage which will be hosted using Apache. How do I do that?

thanks
def index(req):
return "Page"

u cant run it on lighttpd also, which is much faster then Apache :P
Jun 27 '08 #9

P: n/a
Lie
On Jun 11, 9:16*am, asdf <a...@asdf.comwrote:
On Wed, 11 Jun 2008 11:20:48 +1000, Aidan wrote:
asdf wrote:
>Well, there's a few ways you could approach it.
>You could create a cgi program from your script - this is probably the
solution you're looking for.
Output from the script does come up very often. There is a new output
every 10 secs and it's possible that the script might be run
indefinitely. Basically I want all that output displayed in a web
browser
Well, in that case you could simply append the new output to a static
file every 10 seconds, or whenever there is new output. *That way, you
just need to refresh the static file in your browser to see updates...
Given what I understand of your situation, that's how I'd do it.

The problem with this is that browser would have to be refreshed manually
every 10 seconds. Unless there is a way to set this in the script itself.
Surely you don't think you can do that without Javascript don't you?
You can't make the browser refresh automatically in the server side,
it has to be done in the client side scripting or like Opera browser
that have an option to make it refresh a page every few seconds.
A constantly running CGI app is probably not the best idea, given
timeouts and other such constraints you might run into.
>You could have the script run periodically and create a static html
file in the webroot... this would be acceptable, maybe preferable, if
the output from your script doesn't change frequently.

Jun 27 '08 #10

P: n/a
On Wed, 11 Jun 2008 01:05:45 +0000, asdf wrote:
>Well, there's a few ways you could approach it.

You could create a cgi program from your script - this is probably the
solution you're looking for.

Output from the script does come up very often. There is a new output
every 10 secs and it's possible that the script might be run
indefinitely. Basically I want all that output displayed in a web
browser
Here's a simplified Django and AJAX solution:
1. Install Django http://www.djangoproject.com/documentation/install/
and choose the place to strore your Django apps

2. Run 'python django-admin.py startproject YOURPROJECTNAME'

3. Create views.py file inside YOURPROJECTNAME directory
with something like this:

from datetime import datetime
from django.http import HttpResponse
# import your script here
def myscript(request):
output = """\
<html>
<body>

<script type="text/javascript">
function ajaxFunction()
{
var xmlHttp;
try
{
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}
catch (e)
{
// Internet Explorer
try
{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e)
{
alert("Your browser does not support AJAX!");
return false;
}
}
}
xmlHttp.onreadystatechange=function()
{
if(xmlHttp.readyState==4)
{
document.getElementById("hello").innerHTML=xmlHttp .responseText;
setTimeout('ajaxFunction();', 1000);
}
}
xmlHttp.open("GET", "../ajax/", true);
xmlHttp.send(null);
}
window.onload = ajaxFunction;
</script>

<div id="hello"></div>
</body>
</html>"""
return HttpResponse(output)

def ajax(request):
output = """
<p>Hello World from Django and AJAX</p>
<p>Current time is: %s</p>
""" % str(datetime.now())[11:19]
return HttpResponse(output, mimetype="text/plain")

Note, that refresh time is in 'setTimeout('ajaxFunction();', 1000);' in
this example it is 1 second.
3. edit urls.py inside YOURPROJECTNAME directory to something like this:
from django.conf.urls.defaults import *

urlpatterns = patterns('',
(r'^myscript/$', 'YOURPROJECTNAME.views.myscript'),
(r'^ajax/$', 'YOURPROJECTNAME.views.ajax'),
)

4. run 'python manage.py runserver' inside YOURPROJECTNAME directory

5. point your browser to 'http://127.0.0.1:8000/myscript/' and you'll see
the result.

6. Deploy your app to Apache web server
http://www.djangoproject.com/documentation/modpython/
http://www.djangoproject.com/documentation/fastcgi/

Hope this Django/AJAX introduction is helpfull
Please note that this code is extremely simplified you probably need to
learn more about Django and AJAX/Javascript by yourself

Ivan
Jun 27 '08 #11

P: n/a
Lie
On Jun 11, 9:57*am, Aidan <awe...@gmail.comwrote:
asdf wrote:
On Wed, 11 Jun 2008 11:20:48 +1000, Aidan wrote:
asdf wrote:
Well, there's a few ways you could approach it.
>>You could create a cgi program from your script - this is probably the
solution you're looking for.
>Output from the script does come up very often. There is a new output
every 10 secs and it's possible that the script might be run
indefinitely. Basically I want all that output displayed in a web
browser
Well, in that case you could simply append the new output to a static
file every 10 seconds, or whenever there is new output. *That way, you
just need to refresh the static file in your browser to see updates...
Given what I understand of your situation, that's how I'd do it.
The problem with this is that browser would have to be refreshed manually
every 10 seconds. Unless there is a way to set this in the script itself..

You should be able to do that with just:

<meta http-equiv="refresh" content="10"/>

in the <headsection of your page (you can adjust the value of content
from 5 to however many seconds you want between refreshes).
That's an alternative way although many older browser doesn't support
it, it's probably a better way instead of using Javascript if you
don't care about those that are using old browser.
You could also look at adding some AJAX-yness to your page, and have it
query your script for new output every 10 seconds, and then add that
content to the existing page... it sounds like this behavior is what
you're looking for, but it's slightly harder to pull off than the method
mentioned above.
FYI: AJAX is just a very fancy name for Javascript
>
A constantly running CGI app is probably not the best idea, given
timeouts and other such constraints you might run into.
>>You could have the script run periodically and create a static html
file in the webroot... this would be acceptable, maybe preferable, if
the output from your script doesn't change frequently.

Jun 27 '08 #12

P: n/a
On Jun 11, 7:59 am, Lie <Lie.1...@gmail.comwrote:
You can't make the browser refresh automatically in the server side,
Yes you can. I don't know how to do it in Python, but here's an
example in Flaming Thunder of a small, fast, light compiled server
side CGI that delivers dynamic content every 10 seconds.

# Write out the HTTP headers, followed by a blank line.
# Make sure to write CRLF and not just LF, as per HTTP
# specs. Also, turn off caching using the no-cache and
# expires options, so that caching doesn't conflict with
# refreshes.

Set CRLF to CarriageReturn+LineFeed.
Write "Refresh: 10; url=http://www.flamingthunder.com/cgi/
refresh.cgi",CRLF.
Write "Content-type: text/html",CRLF.
Write "Pragma: no-cache",CRLF.
Write "Expires: 0",CRLF.
Write "Cache-Control: no-cache",CRLF.
Write CRLF.

# Write out the dynamic information. In this
# case, we'll just write out Greenwich mean time.

Write GetGreenwichMeanTime.

For this example, the dynamic content is just Greenwich mean time.
You can see it in action at:

http://www.flamingthunder.com/cgi/refresh.cgi

To create the CGI script, I used Flaming Thunder's cross compiling
ability to compile the script under Windows, targeting Linux:

ft file refresh.ft output refresh.cgi target linux32

I then ftp'd refresh.cgi up to the cgi directory on my server, set the
permissions to 700 to make it executable, and it works (without
needing to install any bulky, plodding interpreter).

On Jun 11, 7:59*am, Lie <Lie.1...@gmail.comwrote:
On Jun 11, 9:16*am, asdf <a...@asdf.comwrote:


On Wed, 11 Jun 2008 11:20:48 +1000, Aidan wrote:
asdf wrote:
>>Well, there's a few ways you could approach it.
>>You could create a cgi program from your script - this is probably the
>>solution you're looking for.
>Output from the script does come up very often. There is a new output
>every 10 secs and it's possible that the script might be run
>indefinitely. Basically I want all that output displayed in a web
>browser
Well, in that case you could simply append the new output to a static
file every 10 seconds, or whenever there is new output. *That way, you
just need to refresh the static file in your browser to see updates...
Given what I understand of your situation, that's how I'd do it.
The problem with this is that browser would have to be refreshed manually
every 10 seconds. Unless there is a way to set this in the script itself..

Surely you don't think you can do that without Javascript don't you?
You can't make the browser refresh automatically in the server side,
it has to be done in the client side scripting or like Opera browser
that have an option to make it refresh a page every few seconds.
A constantly running CGI app is probably not the best idea, given
timeouts and other such constraints you might run into.
>>You could have the script run periodically and create a static html
>>file in the webroot... this would be acceptable, maybe preferable, if
>>the output from your script doesn't change frequently.- Hide quoted text -

- Show quoted text -- Hide quoted text -

- Show quoted text -
Jun 27 '08 #13

P: n/a
Lie <Li******@gmail.comat Mittwoch 11 Juni 2008 16:04:
FYI: AJAX is just a very fancy name for Javascript
AJAX is not just a "name", it's a _religion_

SCNR

--
Freedom is always the freedom of dissenters.
(Rosa Luxemburg)
Jun 27 '08 #14

P: n/a
On Jun 11, 10:43 pm, Dennis Lee Bieber <wlfr...@ix.netcom.comwrote:
Those are not /server side/ refreshes...
Correct. But we weren't discussing server side refreshes. We were
discussing how to make the "browser refresh automatically in the
server side":

On Jun 11, 7:59 am, Lie <Lie.1...@gmail.comwrote:
Surely you don't think you can do that without Javascript don't you?
You can't make the browser refresh automatically in the server side,
it has to be done in the client side scripting or like Opera browser
that have an option to make it refresh a page every few seconds.
The example I posted showed a simple way to "make the browser refresh
automatically in the server side" by using an HTTP Refresh header
instead of using any Javascript or client side scripting or setting a
browser option to refresh the page every few seconds.
On Jun 11, 10:43*pm, Dennis Lee Bieber <wlfr...@ix.netcom.comwrote:
On Wed, 11 Jun 2008 07:36:59 -0700 (PDT), Dave Parker
<davepar...@flamingthunder.comdeclaimed the following in
comp.lang.python:
Yes you can. *I don't know how to do it in Python, but here's an
example in Flaming Thunder of a small, fast, light compiled server
side CGI that delivers dynamic content every 10 seconds.
* # Write out the HTTP headers, followed by a blank line.
* # Make sure to write CRLF and not just LF, as per HTTP
* # specs. *Also, turn off caching using the no-cache and
* # expires options, so that caching doesn't conflict with
* # refreshes.
* Set CRLF to CarriageReturn+LineFeed.
* Write "Refresh: 10; url=http://www.flamingthunder.com/cgi/
refresh.cgi",CRLF.

* * * * Those are not /server side/ refreshes... The first thing being
written is a command to the browser that tells the browser to reload the
specified page after a delay period.

* * * * IOWs it is the browser doing the refresh -- which means itstarts a
whole new connection, receiving a page from the CGI script... Said page
again having a browser command to do a delayed refresh.

* * * * Server side would mean that the server somehow continuously sends
updates WITHOUT BEING ASKED.
--
* * * * Wulfraed * * * *Dennis Lee Bieber * * * * * * * KD6MOG
* * * * wlfr...@ix.netcom.com * * * * * * *wulfr...@bestiaria.com
* * * * * * * * HTTP://wlfraed.home.netcom.com/
* * * * (Bestiaria Support Staff: * * * * * * * web-a...@bestiaria.com)
* * * * * * * * HTTP://www.bestiaria.com/
Jun 27 '08 #15

This discussion thread is closed

Replies have been disabled for this discussion.