pelearse con parametros en scripts python

Si alguna vez tenemos que recoger y tratar parámetros pasados por linea de comando a un script de python la siguiente docu nos vendrá de perlas:

http://www.ibiblio.org/g2swap/byteofpython/read/sys-module.htm

para los vagos que no quieren ni hacer click:

#!/usr/bin/python
# Filename: cat.py

import sys

def readfile(filename):
	'''Print a file to the standard output.'''
	f = file(filename)
	while True:
		line = f.readline()
		if len(line) == 0:
			break
		print line, # notice comma
	f.close()

# Script starts from here
if len(sys.argv) < 2:
	print 'No action specified.'
	sys.exit()

if sys.argv[1].startswith('--'):
	option = sys.argv[1][2:]
	# fetch sys.argv[1] but without the first two characters
	if option == 'version':
		print 'Version 1.2'
	elif option == 'help':
		print '''\
This program prints files to the standard output.
Any number of files can be specified.
Options include:
  --version : Prints the version number
  --help    : Display this help'''
	else:
		print 'Unknown option.'
	sys.exit()
else:
	for filename in sys.argv[1:]:
		readfile(filename)
				

Entorno personal (ligero) de desarrollo web: Ubuntu+Lighttpd+PHP+sqlite+symfony

Por un compromiso estoy mirando como crear una mini web-app para unos amigos. Mirando frameworks PHP me ha gustado symfony, y por movidas de curro me ha por pensar como montar un pequeño entorno de desarrollo PHP en local. La idea es:

  • Entorno local (funcionar sin problemas de red) en el que pueda editar ficheros con un IDE lanzado desde mi usuario.
  • Ligero (por eso pienso en lighttpd en logar de apache y en sqlite en logar de mysql)

Continue reading

Como mandar notificaciones a través DBus en python

Lo que sigue es la típica entrada para que no se me olvide alguna cosa. En esta caso es un pequeño trozo de código python que permite mostrar una notificación en nuestro escritorio (probado en gnome) haciendo uso del bus para comunicación de apps en escritorio DBus. Bueno, al lío. Creo que el código se explica solo con los prints 🙂

import dbus
print "Inicializando el bus de tipo session"
bus = dbus.SessionBus()
print "Obteniendo el objeto Notifications"
notify_object = bus.get_object('org.freedesktop.Notifications','/org/freedesktop/Notifications')
print "Obteniendo una interface de tipo Notificatios del objecto"
notify_interface = dbus.Interface(notify_object,'org.freedesktop.Notifications')
print "Lanzando la notificacion"
noti_id = notify_interface.Notify("DBus Test", 0, "", "Hola mundo!",'Solo un saludo!', '',{},10000 )
print "Tenemos la notificacion con el ID: ",noti_id

Aptana, un IDE para AJAX

Vía un HowTo de howtoforge descubro un IDE pensado para trabajar con AJAX: Aptana. Está disponible para varias plataformas y como plugin para eclipse (de hecho creo que es lo que realmente es, un plugin de eclipse).

Treabaja con HTML y soporta unas cuantas librerías javascript: Dojo, JQuery, MochiKit, Prototype, Rico, script.aculo.us. Tiene un debugger con breakpoint, etc y puede que ayude a que javascript apeste menos 🙂 Hay algunos screencast para ver el IDE en acción.

Habrá que probarlo la próxima vez que nos toque pelearnos con javascript.

Desarrollo de paquetes deb con subversion

Me estoy convertiendo en un gran fan de los sistemas de control de versiones, concretamente de subversion. Me parece fundamental el tener un control de los cambios que va sufriendo el código, sobre todo cuando aparecen errores que ya han ocurrido en el pasado, etc. También me estoy entrenando en el noble arte de hacer paquetes .deb. Es una manera estupenda de distribuir nuestro trabajo (sobre todo por que en el trabaja usamos Debian y/o Ubuntu). Entonces si sumamos los paquetes .deb y svn tenemos la repera: svnbuildpackage

Tambien hay herramientas para otros sistemas de control de versiones: cvs-buildpackage, darcs-buildpackage. arch-buildpackage y tla-buildpackage por ejemplo.
Más info:

Más sobre prototype

Estaba mirando un poco la librería de script.aculo.us para una idea/proyectillo que tengo en mente cuando he visto que la introducción a prototype del otro día se queda corta. Así que mirando en la web de script.aculo.us sobre prototype encuentro esta estupenda referencia de la librería prototype. Bastante interesante prototype, ahoraa ver si pongo el marcha un traceador (muerte a los alert!) y le doy unas vueltas a mi idea/proyecto

pychecker, comprueba la sintaxis de tus guiones python

Espero no se el único que comete un error de sintaxis cada 100 lineas de codigo (por no decir 100 errores en cada linea : ). Así que creo que a cualquiera que programe en python le puede interesar la pequeña utilidad pyhecher, que además está a solo un apt de distancia ( sudo apt-get install pychecker ). A los que estén acostumbrados a lenguajes compilados como C les resultará bastante familar los mensajes que nos da pychecker. A buen seguro nos ahorra algo de tiempo en fallos tontos.