sistema - Obtén el nombre del script actual con Python
restar fechas con python (11)
Estoy intentando obtener el nombre del script de Python que se está ejecutando actualmente.
Por ejemplo, tengo un script llamado foo.py
y me gustaría hacer algo como esto dentro de él:
print Scriptname
y obtener: foo.py
El primer argumento en sys será el nombre del archivo actual, así que esto funcionará
import sys
print sys.argv[0] # will print the file name
En aras de la integridad, pensé que valdría la pena resumir los diversos resultados posibles y proporcionar referencias para el comportamiento exacto de cada uno:
__file__
es el archivo en ejecución actualmente, como se detalla en la documentación oficial :__file__
es la ruta del archivo desde el que se cargó el módulo, si se cargó desde un archivo. El atributo__file__
puede faltar para ciertos tipos de módulos, como los módulos C que están vinculados estáticamente al intérprete; para los módulos de extensión cargados dinámicamente desde una biblioteca compartida, es la ruta del archivo de la biblioteca compartida.Desde Python3.4 en adelante, por problema 18416 ,
__file__
es siempre una ruta absoluta, a menos que el archivo que se ejecuta actualmente sea una secuencia de comandos que se haya ejecutado directamente (no a través del intérprete con la opción de línea de comandos-m
) utilizando una ruta relativa.__main__.__file__
(requiere importar__main__
) simplemente accede al atributo__file__
mencionado__file__
del módulo principal , por ejemplo, del script que se invocó desde la línea de comandos.sys.argv[0]
(requiere importarsys
) es el nombre del script que se invocó desde la línea de comandos y podría ser una ruta absoluta, como se detalla en la documentación oficial :argv[0]
es el nombre del script (depende del sistema operativo si se trata de una ruta de acceso completa o no). Si el comando se ejecutó usando la opción de línea de comando-c
al intérprete,argv[0]
se establece en la cadena''-c''
. Si no se pasó ningún nombre de script al intérprete de Python,argv[0]
es la cadena vacía.Como se mencionó en otra respuesta a esta pregunta , los scripts de Python que se convirtieron en programas ejecutables independientes a través de herramientas como py2exe o PyInstaller podrían no mostrar el resultado deseado al usar este enfoque (es decir,
sys.argv[0]
mantendría el nombre de el ejecutable en lugar del nombre del archivo principal de Python dentro de ese ejecutable).
os.path.basename()
puede invocarse en cualquiera de los anteriores para extraer el nombre real del archivo.
Las respuestas anteriores son buenas. Pero encontré este método más eficiente usando los resultados anteriores.
Esto da como resultado que el nombre del archivo de script real no sea una ruta.
import sys
import os
file_name = os.path.basename(sys.argv[0])
Mi solución sucia y rápida:
__file__.split(''/'')[-1:][0]
Para las versiones modernas de Python, la Path(__file__).name
debe ser más idiomática. Además, Path(__file__).stem
le da el nombre del script sin la extensión .py
.
Prueba esto:
print __file__
Si está realizando una importación inusual (por ejemplo, es un archivo de opciones), intente:
import inspect
print (inspect.getfile(inspect.currentframe()))
Tenga en cuenta que esto devolverá la ruta absoluta al archivo.
Suponiendo que el nombre del archivo es foo.py
, el siguiente fragmento de foo.py
import sys
print sys.argv[0][:-3]
o
import sys
print sys.argv[0][::-1][3:][::-1]
saldrá foo
Tenga en cuenta que __file__
proporcionará el archivo donde reside este código, que puede ser importado y diferente del archivo principal que se está interpretando. Para obtener el archivo principal, se puede usar el módulo __main__ especial:
import __main__ as main
print(main.__file__)
Tenga en cuenta que __main__.__file__
funciona en Python 2.7 pero no en 3.2, así que use la sintaxis de importación como la anterior para hacerla portátil.
Utilice __file__
. Si desea omitir la parte del directorio (que podría estar presente), puede usar os.path.basename(__file__)
.
import sys
print sys.argv[0]
Esto imprimirá foo.py
para python foo.py
, dir/foo.py
para python dir/foo.py
, etc. Es el primer argumento de python
. (Tenga en cuenta que después de py2exe sería foo.exe
).