sumar sistema restar obtener hora fechas fecha con clase capturar actual python

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 importar sys ) 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 ).