I found out about Fabric via Armin Ronacher's article
Deploying Python Web Applications.
Fabric is a
Capistrano inspired
deployment tool for the Python community. It is very simple
to use. There are 4 main commands: local is
almost like os.system because it runs a command
on the local machine, run and sudo
run a command on a remote machine as either a normal user
or as root, and put transfers a file to a remote
machine.
Here is a sample setup which displays information about the Apache processes on my remote EC2 instance.
Note: A X.509 Certificate is one type of Access Identifier. Access Identifiers are used to "identify yourself as the sender of a request to an AWS web service". There are two types of access identifiers: AWS Access Key Identifiers and X.509 Certificates. AWS Access Key Identifiers are supported by all Amazon Web Services and X.509 Certificates are supported only by ...
Read more...Here is an example of how to parse a URL using Python's
urlparse module. See the
urlparse module documentation for more information.
from urlparse import urlparse
url = 'http://www.gurlge.com:80/path/file.html;params?a=1#fragment'
o = urlparse(url)
print o.scheme
print o.netloc
print o.hostname
print o.port
print o.path
print o.params
print o.query
print o.fragment
print o.username
print o.password
Results:
http www.gurlge.com:80 www.gurlge.com 80 /path/file.html params a=1 fragment None NoneRead more...
I wrote previously about
how to get stdout and stderr using os.popen4.
However, per the Python documentation, using the
subprocess module is preferred:
The subprocess module allows you to spawn new processes, connect to their input/output/error pipes, and obtain their return codes. This module intends to replace several other, older modules and functions, such as:
os.system
os.spawn*
os.popen*
popen2.*
commands.*
See the subprocess module documentation for more information.
Here is how to get stdout and stderr from a program using the subprocess module:
from subprocess import Popen, PIPE, STDOUT
cmd = 'ls /etc/fstab /etc ...Monit is a tool that can monitor your Apache web server, MySQL database, or other daemon process. It can restart the service based on configurable conditions such as CPU usage, memory usage, number of children, etc. It can log status to a file, email status, and it has a web interface for monitoring or restarting the service. Here are the steps I took to install and configure the Monit tool on Ubuntu Hardy. It merely monitors the status of my Apache web server and restarts it if it stops. It also checks if the memory used by Apache is greater ...
Read more...Simple cron example (tested on Ubuntu):
$ crontab -eThis will bring up your editor (nano by default in Ubuntu)
* * * * * /bin/date >> /tmp/cron_outputBe sure to put a newline at the end of the file.
>> only redirects STDOUT to a file. To redirect both STDOUT and
STDERR, use something like /bin/date >> /tmp/cron_output 2>&1)I wanted to insert URL redirects on my old Blogger posts pointing to my new blog articles. A comment on my Migrating Blogger Posts post suggested that I use the (Python) Blogger API. This was a great suggestion. The Blogger API was well documented and easy to use. Here is the script I used to insert the URL redirects on each of my old Blogger posts.
from gdata import service
import re
import gdata
import atom
NEW_HTML = """
<script language="javascript">
setTimeout('location.href="%s"', 2000);
</script>
<br /><br />
<b>
</b><p>This is my OLD blog. I've copied this ...Twisted is a networking engine written in Python, that among many other things, can be used to do parallel processing. It is very big, though, so I had a hard time finding what I needed. I browsed through the Twisted Documentation and the Twisted O'Reilly book. There is also a Recipe in the Python Cookbook. However, I found Bruce Eckel's article, Concurrency with Python, Twisted, and Flex to be the most helpful. (See also Bruce Eckel's initial article on Twisted: Grokking Twisted)
Here are my notes on running Bruce Eckel's example. I removed the Flex part ...
Read more...os.fork()Here is an example using
os.fork()
to spawn 5 processes
each running the python function, myfunc. Don't forget
the os._exit() at the end. Per the docs, normally,
sys.exit() is used, but os._exit() can
be used in child processes after a fork. It does not call cleanup
handlers, flush stdio buffers, etc.
import os
import time
def myfunc(i):
print "sleeping 5 seconds from process %s" % i
time.sleep(5)
print "finished sleeping from process %s" % i
for i in range(5):
pid = os.fork()
if pid == 0:
myfunc(i)
os._exit(0 ...I now have a new site logo design drawn by my wife, Angela! Doesn't it look great? My previous logo was a crane picture I had just pulled from the web somewhere. So it is nice to have a custom logo done for me. Luckily my wife is artistic and didn't mind drawing it for me. I also made some minor changes to the title block to make things look a little better up there. Now to figure out how to style the rest of the page.
I also got a "memory over limit" warning from Webfaction this ...
Read more...Here is a simple Python example using the
Thread object in the
threading module.
import time
from threading import Thread
def myfunc(i):
print "sleeping 5 sec from thread %d" % i
time.sleep(5)
print "finished sleeping from thread %d" % i
for i in range(10):
t = Thread(target=myfunc, args=(i,))
t.start()
Results:
sleeping 5 sec from thread 0 sleeping 5 sec from thread 1 sleeping 5 sec from thread 2 sleeping 5 sec from thread 3 sleeping 5 sec from thread 4 sleeping 5 sec from thread 5 sleeping 5 sec from thread 6 sleeping 5 sec ...Read more...
To list the attributes of a Python instance object, I could use the built-in dir() function, however, this will return the instance object's methods as well data attributes. To get just the data attributes, I can use the instance object's __dict__ attribute:
class A(object):
def __init__(self):
self.myinstatt1 = 'one'
self.myinstatt2 = 'two'
def mymethod(self):
pass
a = A()
for attr, value in a.__dict__.iteritems():
print attr, value
myinstatt2 two myinstatt1 oneRead more...
I'm now running Django 1.0 for this blog. For those who haven't heard, Django 1.0 Final was released yesterday sometime. My last Django update had been shortly after Beta 2 was released and updating to 1.0 Final didn't require any code changes for me. (I think everything since then was supposed to be bug fixes.) (I also updated my work project to 1.0 with no problem.) That's about all the content for this post. Here are some links:
Here are my notes on my path to 1.0:
Read more...I've updated to Django 1.0 Beta 2. One of the big items for this release was the new commenting framework. I had been waiting for this, so I was excited to see it was finally done.
I also added support for Markdown formatting of my comments. I actually could have added this earlier, but I only recently learned that Django has built-in support for Markdown.
When I glanced over the changes for the new commenting framework, I missed this change and I actually had to Google on my error message. Luckily, someone (I don't remember ...
Read more...
aws
(4)
bison_flex
(1)
blogger
(4)
c
(10)
cardstore
(5)
colinux
(2)
concurrency
(8)
conkeror
(2)
cygwin
(17)
dell
(3)
django
(31)
eclipse
(30)
emacs
(18)
email
(1)
error
(11)
gnip
(1)
json
(1)
keyboard
(3)
linux
(31)
matplotlib
(5)
mercurial
(3)
openid
(1)
personal
(4)
preferences
(4)
pyqt
(18)
python
(88)
rails
(1)
ratpoison
(3)
recursion
(1)
rsync
(3)
ruby
(2)
sql
(10)
subversion
(4)
twisted
(5)
ubuntu
(33)
untagged
(7)
urxvt
(3)
vxworks
(26)
wmii
(3)