2009-05-09 16 views
5

Quando si scrive uno script Python che può essere eseguito in diversi ambienti del sistema operativo (Windows/* nix), quali sono alcuni buoni modi per impostare un percorso ? Nell'esempio seguente vorrei avere i file di log memorizzati nella cartella dei registri sotto la directory corrente. È un approccio accettabile (sono piuttosto nuovo per Python) o ci sono modi migliori per raggiungere questo obiettivo? GrazieQuali sono alcuni buoni modi per impostare un percorso in uno script Python supportato da più SO

if os.name == 'nt': 
    logdir=('%s\\logs\\') % (os.getcwd()) 
else: 
    logdir=('%s/logs/') % (os.getcwd()) 

logging.basicConfig(level=logging.INFO, 
    format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s', 
    datefmt='%m-%d-%y %H:%M:%S', 
    filename='%slogfile.log' % (logdir), 
    filemode='a') 
+1

Si noti che i sistemi operativi MS hanno accettato la barra diretta come separatore di percorso per un lungo periodo di tempo (sono le shell della riga di comando che lo hanno emesso). "/" funziona anche su OS X. Non conosco OpenVMS. L'approccio più portabile è quello che Ryan menziona, che funzionerà su tutti i sistemi operativi. – outis

risposta

8

Sicuramente dare un'occhiata a os.path. Contiene molte delle funzioni di manipolazione del percorso cross-OS "sicure" di cui hai bisogno. Per esempio, ho sempre fatto questo lo scenario che si sta delineando:

os.path.join(os.path.abspath(os.path.dirname(__file__)), 'logs') 

noti inoltre che se si vuole ottenere il separatore di percorso, è possibile utilizzare:

os.path.sep 

Questo produrrà '\\' su Windows e '/' su Linux, per esempio.

+0

Grazie Ryan. Alla fine ho seguito il seguente consiglio: os.path.join (os.path.abspath (os.path.dirname (__ scriptname__)), 'logs') + (os.sep) Questo ha restituito il percorso corretto con la barra corretta alla fine del percorso. – Shaun

+0

Felice di aiutare! :-) –

2

In primo luogo, utilizzare sempre os.path per la manipolazione del percorso.

Ancora più importante, tutti i percorsi devono essere forniti nei file di configurazione.

Per la registrazione, utilizzare la funzione fileConfig.

Per tutto il resto, assicurarsi di avere un file di configurazione o un parametro della riga di comando o una variabile di ambiente.

Problemi correlati