Segun se invoque programa.py

Raúl Alexis Betancor Santana rabs en dimension-virtual.com
Vie Sep 25 09:40:34 CEST 2009


On Thursday 24 September 2009 15:35:49 Juan M Puertas wrote:
> lasizoillo ha escrito: "...  busca algún argv[0] por el código (es la
> variable con el nombre del programa), que creo que van a ir por allí los
> tiros ;-) "
>
> * ¡Exacto!. :-) La clave está aquí:
>
> #directories
> PREFIX=os.path.split(os.path.split(sys.argv[0])[0])[0]
> DATADIR=os.path.join(PREFIX,'share','openastro.org')
>
>  Es decir; que el programa obtiene el camino en el que se está ejecutando
> la aplicación, y de éste deduce dónde se encuentra la carpeta
> "openastro.org". En este caso, está en "/usr/share" Por lo tanto se arregla
> creando la carpeta "share" en el mismo camino en que se encuentra
> "programa.py", y copiando dentro de "share" la carpeta "openastro.org" que
> necesita la aplicación. El problema ya ha sido resuelto pero me queda la
> curiosidad  de que "programa.py" está en el mismo directorio que los
> ejecutables de python; es decir: "/usr/bin", y su carpeta "openastro.org",
> se instala en "/usr/share".  ¿Porqué cuando se invoca con el nombre del
> programa, éste encuentra su carpeta de trabajo en "/usr/share", y cuando se
> invoca con Python o el entorno de desarrollo no?. Debe ser alguna
> particularidad de Linux/Unix que desconozco...


El porqué del falló está clarísimo ...

----------- /usr/local/bin/test.py ------------------
#!/usr/bin/python

import sys
import os

print sys.argv[0]
print os.path.split(os.path.split(sys.argv[0])[0])[0]
---------------------------------------------------------

chmod +x /usr/local/bin/test.py

Ahora lo invocamos desde cualquier sitio:
salma:~# test.py
/usr/local/bin/test.py
/usr/local

salma:~# python /usr/local/bin/test.py
/usr/local/bin/test.py
/usr/local

Ahora lo invocamos desde /usr/local/bin
salma:~# cd /usr/local/bin/
salma:/usr/local/bin# ./test.py
./test.py


Meeeeeeeccccccc ... ¿ves el error?, no puedes usar sys.argv[0], tan 
alegremente ... para este tipo de cosas, lo mejor es un archivo de 
configuración donde guardar esos valores.
-- 
Raúl Alexis Betancor Santana
Dimensión Virtual
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes





Más información sobre la lista de distribución Python-es