Αντρω δι Νεξυνω

[Python] Trovare la direttrice della applicazione

« Older   Newer »
  Share  
view post Posted on 3/1/2018, 17:35
Avatar

Nubbio x Sempre

Group:
Moderazione globale
Posts:
7,225

Status:


Salve agli improbabili lettori :)

Dopo tanto tempo riprendo a scrivere qualcosa di programmazione, su python, questa volta, un interessante linguaggio che sto attualmente iniziando ad esplorare.
Come per gli altri post presenti, si tratta di piccoli appunti a mio promemoria che rendo disponibili nel caso servissero a qualcuno, non aspettatevi chi sa che.

Ovvio che se qualcuno, nel circuito, vuole discorrere dell'argomento lo si fa volentieri, mi mandi un MP o scriva nella sezione aperta, nel caso.


Una esigenza che si pone spesso nello sviluppo di applicazioni è quella di definire la direttrice che contiene il programma avviato, ciò per varie motivazioni, spesso legate alla necessità di reperire risorse, files di configurazione etc.
Da tener presente che la direttrice contenente l'applicazione non necessariamente (anzi, spesso) NON È quella da cui viene avviato che può essere diversa o, nel caso di applicazioni grafiche, proprio indefinita ... non sempre estrarla è semplicissimo, anzi, spesso da filo da torcere.

in python, per risolvere il problema bisogna appoggiarsi a ben due moduli di libreria, il primo è il modulo "sys", tale modulo si interfaccia, come dice il nome, al sistema e tra i numerosi strumenti che mette a disposizione, tra l'altro fornisce una lista 'argv', contenente i parametri di avvio della applicazione, il primo di tali parametri è "il nome" della applicazione stessa, del file, ovviamente, quindi, per ottenerlo, sarà sufficiente leggere il primo elemento tale lista; per esempio :
CODICE
pathFile = sys.argv[0]


Naturalmente, il nome del file NON È la direttrice che lo contiene, per ottenerla "si potrebbe" processare la stringa "pathFile", tenendo presente il carattere di separazione dei file (nei sistemi unix-like "/", "\" in windows, etc.) e trovando l'ultimo presente ma vi è un utile modulo di interfacciamento che vi risparmia la seccatura : il modulo "os"
tale modulo ha, tra le sue classi e metodi una utile libreria per la gestione dei percorsi dei file, "path" che, a sua volta possiede un metodo, "dirname", il quale, datogli in pasto il nome di un file restituisce la direttrice cui appartiene, esempio :
CODICE
dirFile = os.path.dirname(pathFile)


trovato questo metodo feci un sorriso da un orecchio all'altro :D ... per poi ricredermi, potendoci essere vari problemi, tipo percorsi relativi o altro, non necessariamente è sufficiente per ottenere la corretta direttrice della applicazione, è opportuno averne il percorso assoluto, per questo aspetto ci viene in soccorso una altro metodo di path : "abspath", che provvederà a fornirci il path assoluto normalizzato del file; quindi per avere il path della direttrice faremo :
CODICE
path_dirFile = os.path.abspath(dirFile)


Abbiamo, quindi, con sole tre istruzioni (dovreste vedere per bash! :D ) la direttrice in cui risiede la nostra applicazione ... naturalmente, possiamo combinarle in una unica istruzione, non cambia molto ma ci risparmia di memorizzare due variabili, quindi :
CODICE
path_dirFile = os.path.abspath(os.path.dirname(sys.argv[0]))

Ci darà ciò che ci occorre.

Mi son sbattuto un po' in ricerche prima di capirlo, tempo risparmiato per voi in caso serva e non lo sappiate già.

Piccola nota sull'apparentemente inutile abspath, guardate questa sequenza di istruzioni nello IDLE di python:
CODICE
>>> import sys
>>> sys.argv[0]
''
>>> import os
>>> os.path.dirname(sys.argv[0])
''
>>> os.path.abspath(os.path.dirname(sys.argv[0]))
'/home/nuzzopippo'
>>>

Come potete vedere, pur non essendoci alcun parametro, dato che non è stata avviata alcuna applicazione, e quindi nessuna direttrice da essa derivata, da abspath viene restituito il percorso in cui sta girando lo IDLE (la home utente) ... argomento convincente, no? ;)

Edited by nuzzopippo - 9/1/2018, 07:15
 
Web  Top
0 replies since 3/1/2018, 17:35   102 views
  Share