Re: Segun se invoque programa.py

Raúl Alexis Betancor Santana <[email protected]>
Newsgroups gmane.comp.python.general.castellano
Organization Dimensión Virtual S.L.
Message-ID <[email protected]>
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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.