Para algo que tengo que hacer necesitaría fijar el entorno de la shell desde python, pero en principio esto no es posible.
Quiero decir, que desde python tal cual no se puede, ya que en UNIX desde un proceso hijo no se puede modificar el entorno del padre.
Una opción sería hacer un 'shell script' en el que se invoque un script python con cada variable a configurar, y que el script devuelva el valor para esa variable.
Pero en mi caso me interesaria mas otra cosa, y es que el script de la shell, el que invoca a python, no sepa nada de que variables de entorno hay que configurar.
La solución es parecida: el script python generar el codigo shell a ejecutar sacandolo por stdout y la shell lo ejecuta.
Mas info aquí.
Y ahora la solución que voy a aplicar, mostrada con un ejemplo muy tonto.
Código python que define las variables (prueba.py):
print "KK1=kk1"
print "KK2=kk2"
La shell que lo invoca:
for cmd in `python $PWD/prueba.py`; do
export $cmd
done
Sencillo ¿verdad?
miércoles, septiembre 26, 2007
Editores de texto
Tenía una versión de ultraedit de evaluación, que me ha caducado. Esto me ha motivado a usar vim (a ver si lo aprendo un poco mejor...).
Anteriormente usaba ultraedit, accediendo a las maquinas por SFTP...
Hablando con Marcos me comenta de dos editores que están bien, que el usa:
Básicamente mientras pase esta temporada con vim, lo que necesito es un editor (ligero) para editar ficheros en local (y super importante, que tenga pestañas)
Actualización
Tras haber escrito lo anterior he buscado por comparativas, y paginas con listado de editores. Ahí van mas links:
Lo que no se (en la comparativa no viene) si hay alguno que soporte edición en modo columna (aparte de ultraedit).
Anteriormente usaba ultraedit, accediendo a las maquinas por SFTP...
Hablando con Marcos me comenta de dos editores que están bien, que el usa:
- scite [wikipedia].
- ulipad. Es un editor de python, y que tiene buena pinta. Puede acceder por ftp, pero parece que no por stp. Ha sido llevado a code.google.
Básicamente mientras pase esta temporada con vim, lo que necesito es un editor (ligero) para editar ficheros en local (y super importante, que tenga pestañas)
Actualización
Tras haber escrito lo anterior he buscado por comparativas, y paginas con listado de editores. Ahí van mas links:
- Tabla comparativa.
- Y comparativa wikipedia.
- En dmoz.
- Listados: [1][2][wikipedia]
- Articulillos: [1]
Lo que no se (en la comparativa no viene) si hay alguno que soporte edición en modo columna (aparte de ultraedit).
NetWinShit
Otro post para mostrar carencias de windows bastante irritantes. Esta vez relacionadas va de temas de red.
- Imposiblidad de poder tener perfiles de red. Aunque debe de haber aplicaciones externas que lo permitan... O en caso contrario siempre se puede usar una aplicación de testeo, que imite a un usuario.
- Imposibilidad de tener configurado mas de un dominio. Para poder conectarte a un dominio, necesitas una cuenta de administración del dominio, por lo que normalmente no lo harás tu, como usuario que eres. Lo hará un administrdor por tí. Pues bien, imaginate que con tu portatil megachulo estas unos días en un edificio y otros en otro, y esos tienen dominios diferentes... Pues bien, no puedes tener ambos configurados y que cuando te salga la ventana de login, selecciones el que te interesa...
martes, septiembre 25, 2007
domingo, septiembre 23, 2007
El porqué del __name__ == "__main__"
En python.es posteé lo siguiente:
"Si tengo un modulo apps.py que tiene:
import debug
def programBegin():
debug.init()
Y si tengo un modulo debug.py que tiene:
DEBUG = 0
def init():
global DEBUG
DEBUG=1
if ( __name__ == "__main__") :
import apps
apps.programBegin()
print DEBUG
¿Porque al ejecutar como comando el modulo debug.py, me imprime 0? Mi no entender..."
La respuesta (por parte de Gabriel Genellina):
"La clave está en que al ejecutar debug.py directamente, se crean DOS
copias del MISMO modulo.
1) El script que estas ejecutando (debug.py) se carga como modulo
'__main__' (es decir, en sys.modules se inserta un nuevo item con
clave='__main__' y valor=el modulo debug.py).
2) Cuando apps ejecuta "import debug", Python se fija si el modulo ya esta
importado (mirando las claves de sys.modules) y como no lo encuentra, lo
lee de disco y lo inserta con clave='debug'
O sea que debug.py fue importado DOS veces. Cuando programBegin llama a
debug.init, lo que se modifica es el valor de la variable DEBUG que esta
en el modulo llamado "debug". Cuando haces el print estando dentro del
script principal (que coincide con debug.py) lo que estas imprimiendo es
la variable DEBUG que esta en el modulo llamado "__main__".
De paso, esta es justamente la razon por la que funciona la condicion:
if __name__ == "__main__":
que más de uno escribe sin tener ni idea de porqué se hace así."
"Si tengo un modulo apps.py que tiene:
import debug
def programBegin():
debug.init()
Y si tengo un modulo debug.py que tiene:
DEBUG = 0
def init():
global DEBUG
DEBUG=1
if ( __name__ == "__main__") :
import apps
apps.programBegin()
print DEBUG
¿Porque al ejecutar como comando el modulo debug.py, me imprime 0? Mi no entender..."
La respuesta (por parte de Gabriel Genellina):
"La clave está en que al ejecutar debug.py directamente, se crean DOS
copias del MISMO modulo.
1) El script que estas ejecutando (debug.py) se carga como modulo
'__main__' (es decir, en sys.modules se inserta un nuevo item con
clave='__main__' y valor=el modulo debug.py).
2) Cuando apps ejecuta "import debug", Python se fija si el modulo ya esta
importado (mirando las claves de sys.modules) y como no lo encuentra, lo
lee de disco y lo inserta con clave='debug'
O sea que debug.py fue importado DOS veces. Cuando programBegin llama a
debug.init, lo que se modifica es el valor de la variable DEBUG que esta
en el modulo llamado "debug". Cuando haces el print estando dentro del
script principal (que coincide con debug.py) lo que estas imprimiendo es
la variable DEBUG que esta en el modulo llamado "__main__".
De paso, esta es justamente la razon por la que funciona la condicion:
if __name__ == "__main__":
que más de uno escribe sin tener ni idea de porqué se hace así."
viernes, septiembre 21, 2007
lunes, septiembre 17, 2007
Via slashdot: Guido and Bruce Eckel Discuss Python 3000.
Debería ser de obligada lectura para los que curramos con python.
Bruce comenta que en Ruby también van a hacer ruptura hacia atrás, y que van a eliminar los 'perl-isms'. Muy interesante.... era una de las cosas que no me gustó de Ruby cuando le eché un vistazo.
Debería ser de obligada lectura para los que curramos con python.
Bruce comenta que en Ruby también van a hacer ruptura hacia atrás, y que van a eliminar los 'perl-isms'. Muy interesante.... era una de las cosas que no me gustó de Ruby cuando le eché un vistazo.
lunes, septiembre 10, 2007
viernes, septiembre 07, 2007
Column-oriented DBMS [wikipedia].
En la siguiente noticia de slashdot hablan sobre el tema: Are relational databases obsolete?
En la siguiente noticia de slashdot hablan sobre el tema: Are relational databases obsolete?
Un sitio al que voy a tener que echar un vistazo con calma: en High Scalability.
Via barrapunto: ¿Qué plataforma usan los sitios más populares?.
Via barrapunto: ¿Qué plataforma usan los sitios más populares?.
miércoles, agosto 15, 2007
jueves, julio 19, 2007
Instalando con python
Para instalar con python, el paquete estandar es distutils [distutils-sig].
Una alternativa es usar setuptools, que se supone incorpora ciertas mejoras sobre distutils.
Para distribuir código python nos vale. Si ademas nuestro proyecto require de versiones de librerías o de aplicaciones externas y queremos comprobar las dependencias, necesitaremos alguna herramienta adicional, tipo GNU Build System (GBS).
La mayor limitación de GBS es que es para UNIX, por lo que si queremos instalar en windows, necesitaremos cygwin. Una alternativa a usar cygwin es MinGW.
Una alternativa es usar setuptools, que se supone incorpora ciertas mejoras sobre distutils.
Para distribuir código python nos vale. Si ademas nuestro proyecto require de versiones de librerías o de aplicaciones externas y queremos comprobar las dependencias, necesitaremos alguna herramienta adicional, tipo GNU Build System (GBS).
La mayor limitación de GBS es que es para UNIX, por lo que si queremos instalar en windows, necesitaremos cygwin. Una alternativa a usar cygwin es MinGW.
miércoles, julio 18, 2007
MAC OS X
Estos tios de apple la verdad es que son unos genios. Me he enterado hace poco que el OS de apple está basado en BSD, vamos... que está basado en UNIX. Un motivo mas para querer un MAC. Podeis comprobarlo.
sábado, julio 14, 2007
Configuración de arranque de windows
Hoy he descubierto un comando superutil para ver que programas/servicios se ejecutan cuando arrancamos un windows, y para poder modificar el comportamiento. Se trata de msconfig.
viernes, julio 13, 2007
miércoles, julio 11, 2007
Alternativas a SWIG
Me está siendo duro usar swig...
¿Porque estoy usando swig? Pues sencillo porque en otra parte del proyecto se ha usado para acceder a C++.
Pero buscando información me he encontrado con que hay alternativas:
¿Porque estoy usando swig? Pues sencillo porque en otra parte del proyecto se ha usado para acceder a C++.
Pero buscando información me he encontrado con que hay alternativas:
Parece que la gente del grupo de python o que menos le gusta es SWIG. Por ejemplo:
"The best thing to do is to offer your C++-lib with a C-style interface. Then you can use python's ctypes (included since python2.5) to access the shared library.
If you insist on using C++, you can expose the lib using several available wrapper generators. I know of three: SIP, Swig & Boost::Python. The first I've got some very good first-hand experience. The second is somewhat primitive IHMO. The third I never used. "
El que diga que ctypes está incluido desde python2.5 no quiere decir que no se pueda usar con versiones anteriores.
Al respecto ver los mitos sobre swig.
Otro módulo interesante es pyrex.
Suscribirse a:
Entradas (Atom)