Python: percorso assoluto dello script in esecuzione

Può sembrare una cosa banale ma, cercando, mi sono accorto che non lo è: ottenere in Python il percorso assoluto dello script attualmente in esecuzione.

Iniziamo subito con la soluzione proposta:

import os, sys
script_path = os.path.abspath(os.path.dirname(sys.argv[0]))
print(f"Script caricato da: {script_path}")

Dove:

  1. Importa la libreria “os” (per gestire il sistema operativo) e “sys” (per gestire i parametri di sistema).
  2. Associa alla variabile “script_path” il risultato di “os.path.abspath()” – che serve per ottenere il percorso assoluto a partire da un percorso qualsiasi – che, a sua volta, prende il risultato da “os.path.dirname()” – la quale tronca un percorso assoluto e comprensivo del nome file e toglie quest’ultimo – che, ancora, prende il primo valore (“[0]”) impostato nella lista “sys.argv” (che contiene i parametri passati a riga di comando per eseguire lo script; il primo è sempre il percorso completo dell’eseguibile).
  3. Stampa il risultato utilizzando la formattazione avanzata (la “f” prima delle virgolette) introdotta in Python 3.x

In giro ho trovato molte altre soluzioni, soprattutto quelle più semplici che prevedono l’uso della variabile “__file__” che, tuttavia, non risultano stabili perché in alcuni contesti non funzionano, ad esempio:

  • Se lo script è invocato da IDLE
  • Se lo script è invocato da un altro script (ma non sono certo, sono pigro e non ho provato)
  • Se lo script è stato compilato come eseguibile (esistono dei tools che convertono i .py in .exe o comunque eseguibili per i vari sistemi operativi)

Autore: BuDuS

Disegnatore Meccanico, con la passione per l'Informatica. Come hobby, produco piccoli software di (in)utilità.