Re: Segun se invoque programa.py
Hernan M Foffani <[email protected]>
| Newsgroups | gmane.comp.python.general.castellano |
|---|---|
| Message-ID | <[email protected]> |
>> 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. Hombre... Si sabes qué contiene sys.argv[0] lo puedes usar sin sentir tristeza. ;-) Para no complicarme la vida he optado por dos esquemas simples y excluyentes. O empaqueto todo (python puro) y lo mando a site-packages via un .egg, o distribuyo mediante instaladores nativos en cuyo caso incluyo mi propio intérprete. Para el caso original de J.M.Puertas, una modificación pequeña al script reemplazando sys.argv[0] por __file__ y un par de cosillas mas quizás sería suficiente. _______________________________________________ Lista de correo Python-es http://listas.aditel.org/listinfo/python-es FAQ: http://listas.aditel.org/faqpyes