2008/05/30

Distintas formas de listar ficheros en linux

Trabajando en consola es muy común listar los contenidos de los directorios.
Lo típico es usar el comando ls que tiene muchisimas opciones, pero su uso normal es:


Otra manera es usar el comando find sin parámetros:


Hoy he aprendido una nueva: tree. ¿Quién necesita entorno gráfico? jejeje

       
   

2008/05/27

Diccionario de English-Español para Firefox

Hace años usaba el programa Babylon que pinchando sobre cualquier palabra (en una web, en un editor de texto, incluso en una fotografía) te ofrecía su traducción en una ventanita. Este software incluso buscaba las preposiciones en caso de que fuera un phrasal verb... El programa era muy útil, pero de pago y dejé de usarlo.

Googleando un poco, descubrí que existe un free-babylon en source-forge, pero parece que no tiene mucha actividad actualmente.




Sin embargo, firefox ofrece muchos addons relacionados con traducción de palabras, páginas web, etc. Existe uno en concreto, que me resulta especialmente útil y que recuerda al funcionamiento de Babylon. Se trata de SpanishTrans. Esta extensión te permite seleccionar una determinada palabra y pulsando botón derecho de ratón y clickando en English->Spanish te abre una ventana con la definición extraída de wordreference.

       
   

2008/05/26

Ejecutar un script externo en consola de Python, IDLE, Jython y BeanShell

Jython y BeanShell son muy útiles para ejecturar comandos de forma interactiva. Sin embargo, cuando se quieren ejecutar directamente scripts escritos la opción de cortar y pegar no es muy cómoda. Por eso en ocasiones, puede ser útil usar lo siguiente:
En BeanShell:
filepath = "/usr/local/scripts/bsh/myscript.bsh";
source(filepath);
En Jython:
filepath = '/usr/local/scripts/py/myscript.py'
execfile(filepath)
Este modo de lanzar scripts tiene también la ventaja de que, en caso de fallos en el script, los mensajes de error dan una información más completa aportando por ejemplo la línea donde se ha producido el error.

UPDATE: Ejecutar un script externo en IDLE o en la consola interactiva de python

En la consola de IDLE se podría ejecutar un script externo con:
filepath = '/usr/local/scripts/py/myscript.py'
execfile(filepath)

En python3 sería:

exec(open("/usr/local/scripts/py/myscript.py").read())

UPDATE2: Ejecutar un script externo en ipython 

En ipython existe la posibilidad de usar el comando "run" directamente (sin comillas en el path) para ejecutar un script externo, es decir:
run /usr/local/scripts/py/myscript.py


       
   

2008/05/24

Definición Programación Orientada a Eventos

Andrés, Pablo y yo hemos comprendido por fin un término difícil de entender para aquellos programadores nutridos de otros paradigmas de programación. La "programación orientada a eventos" puede ser resumida, tras varios congresos, charlas, conferencias, etc. a los que he asistido con mi portátil, con la siguiente fotografía:


Indispensable la acreditación colgada del cuello... :-)
Para los que prefieran la definición tradicional, consultar wikipedia.
       
   

2008/05/23

Bajar automáticamente archivos de un FTP con python

A menudo hay que acceder a un ftp y bajarse gran número de ficheros con un determinado nombre de diferentes directorios. Automatizar este proceso puede ser bastante útil en muchos casos. Usar un cliente FTP gráfico no suele ser de ayuda en estos casos. Los clientes FTP en línea de comandos son interactivos por lo que no se pueden realizar scripts con ellos, más allá de ejecutar una lista de comandos predefinida.

Este simple script se conecta a un servidor, se posiciona en la carpeta 'CATASTRO', y se accede a todos los directorios con profundidad '1' guardando los ficheros que interesan, en este caso shapefiles llamados MASA, en una carpeta local.

#!/usr/bin/python
# DESCRIPTION: Python script that connects to a FTP server and 
#              gets some Shapefiles from 'CATASTRO' folder and subfolders
# AUTHOR: Nacho Uve
# DATE  : May 2008
# LICENSE: GPL2 or greater
from ftplib import FTP

ftp = FTP('server.com');
ftp.login(user='myuser', passwd='mypassword')
ftp.cwd("CATASTRO");

# OPTION: To get a 'ls -l' list                                                                                                                                                                 
# dirs = []                                                                                                                                                                                     
# # Used a callback to 'dirs'                                                                                                                                                                   
# ftp.dir(dirs.append)                                                                                                                                                                          

dirs = ftp.nlst()
for row in dirs:
    print row
    ftp.cwd(row)
    # Save shapefiles in the local machine with the first word of the folder as filename
    ftp.retrbinary('RETR MASA.SHP', open(row.split()[0]+'.shp','wb').write)
    ftp.retrbinary('RETR MASA.SHX', open(row.split()[0]+'.shx','wb').write)
    ftp.retrbinary('RETR MASA.DBF', open(row.split()[0]+'.dbf','wb').write)
    ftp.cwd('..')
ftp.quit()