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