Re: Segun se invoque programa.py
Juan M Puertas <[email protected]>
| Newsgroups | gmane.comp.python.general.castellano |
|---|---|
| Message-ID | <[email protected]> |
Interesante Hernan, lo tendré en cuenta. Muchas gracias a ti y a todos. :-) ________________________________ De: Hernan M Foffani <[email protected]> Para: Lista de discusión sobre python en castellano <[email protected]> Enviado: viernes, 25 de septiembre, 2009 15:17:22 Asunto: Re: [Python-es] Segun se invoque programa.py Pero ten en cuenta que el directorio corriente puede ser distinto del directorio donde se encuentra la aplicación. Si quieres lo último utiliza __file__ (aunque no sirve en todas las situaciones) 2009/9/25 Juan M Puertas <[email protected]>: > Pues si, Raúl y Hernan, no soy el autor del programa, que por otra parte es muy brillante, y utiliza técnicas muy avanzadas. > En mi poca experiencia, prefiero esto: "CaminoAplicacion = os.getcwd()" que muestra el directorio en el que se está ejecutando la aplicación. > Saludos :-) > > > > > ________________________________ > De: Hernan M Foffani <[email protected]> > Para: Lista de discusión sobre python en castellano <[email protected]> > Enviado: viernes, 25 de septiembre, 2009 12:04:26 > Asunto: Re: [Python-es] Segun se invoque programa.py > >>> 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 > > > > > _______________________________________________ > Lista de correo Python-es > http://listas.aditel.org/listinfo/python-es > FAQ: http://listas.aditel.org/faqpyes > _______________________________________________ Lista de correo Python-es http://listas.aditel.org/listinfo/python-es FAQ: http://listas.aditel.org/faqpyes _______________________________________________ Lista de correo Python-es http://listas.aditel.org/listinfo/python-es FAQ: http://listas.aditel.org/faqpyes