Segun se invoque programa.py

Juan M Puertas juatman_2000 en yahoo.es
Sab Sep 26 13:48:06 CEST 2009


 Interesante Hernan, lo tendré en cuenta.
 Muchas gracias a ti y a todos. :-)




________________________________
De: Hernan M Foffani <hfoffani en gmail.com>
Para: Lista de discusión sobre python en castellano <python-es en aditel.org>
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 <juatman_2000 en yahoo.es>:
>  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 <hfoffani en gmail.com>
> Para: Lista de discusión sobre python en castellano <python-es en aditel.org>
> 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





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