2014-06-06 17 views
8

Attualmente utilizzo sempre il os.path.join nel mio progetto django per il supporto del sistema operativo trasversale; gli unici posti in cui attualmente non lo uso sono per i nomi dei modelli e per gli URL. Quindi nelle situazioni in cui voglio il percorso '/path/to/some/file.ext' io uso os.path.join('path', 'to', 'some', 'file.ext').È necessario os.path.join?

Comunque ho appena provato il mio progetto su finestre per vedere se questo ha funzionato bene/era necessario e sembra finestre sarà lieto di accettare '/' o '\\' (o '\' quando si lavora al di fuori del pitone), e, come tutti i sistemi UNIX usano tutti '/' esso sembra che non ci sia motivo per usare mai '\\', nel qual caso è necessario utilizzare os.path.join ovunque?

C'è una situazione in cui l'aggiunta di un-o l'utilizzo di posixpath causerà problemi su determinati sistemi operativi (ad esclusione di XP o inferiore in quanto non sono più ufficialmente supportati)? Se non penso, userò semplicemente posixpath o aggiungo uno '/' per unire le variabili con altre variabili o variabili con stringhe e non separare i percorsi delle stringhe (quindi lasciatelo come '/path/to/some/file.ext') a meno che non ci sia un altro motivo per non farlo diversamente da rompere le cose.

Per evitare che questo sia potenzialmente chiuso in quanto principalmente basato sull'opinione, vorrei chiarire che la mia domanda specifica è se l'uso di os.path.join causerà mai un programma python non funzionare come previsto su un sistema operativo supportato.

+1

Anche se forse troppo esoterico per una risposta, l'uso di un separatore di percorso hardcoded causerà la non portabilità con il sistema RISC .. (e [ci sono porte] (https: // www. python.org/download/other/) a tale) – user2864740

+0

RISC OS è compatibile con django, nginx, supervisor e varie librerie di django? Altrimenti non avrò bisogno di preoccuparmene per questo progetto, ma se lo è, potrebbe valere la pena di pensarci. – semicolon

risposta

13

L'API di Microsoft Windows non si cura se si utilizza / o \, quindi normalmente è bene utilizzare come separatore su Windows. Tuttavia, i comandi della riga di comando ("DOS box" - command.com o cmd.exe) richiedono generalmente \ in percorsi (/ viene utilizzato per contrassegnare le opzioni di comando in queste shell native di Windows). Ad esempio, se si crea una riga di comando in Python e si attiva una shell per eseguire il comando, in genere è necessario utilizzare il separatore \ su Windows.

Un altro caso è coperto in Lib/macpath.py: il numero sep è impostato su : (due punti), adatto ai vecchi sistemi Macintosh. Credo che sia l'unico sistema su cui Python abbia mai eseguito che non accetta / come separatore.

MODIFICA: see here per un lungo account di regole di denominazione di Windows. Non incolpare me ;-)

+0

In cmd.exe quale tipo di comandi non funzionerà? Perché ho appena testato cd './test/test' e 'python .test/manage.py' ed entrambi hanno funzionato bene. – semicolon

+0

Prova più difficile: troverai molte cose che non funzioneranno ;-) Ad esempio, 'dir./ misc' se si è attualmente in una directory che ha una sottodirectory 'misc'. Otterrai l'errore 'Invalid switch -" misc ".'. Per una contabilità esatta di tutti i casi, dovrai chiedere a Microsoft :-( –

+0

Okay grazie! Ho testato "cd" e "python" immediatamente perché quelli erano quelli che usavo principalmente e ritenevo che/effettivamente funzionasse. – semicolon

4

Se si presenta un nome file a un utente per qualsiasi motivo, è meglio se tale nome di file segue le solite convenzioni del sistema operativo.

Windows è stato in grado di utilizzare il / per separatori di percorso per tutto il tempo che ci sono stati percorsi - questa era una funzionalità DOS.

+0

In questo caso è su un sito Web in modo che gli unici percorsi temporali saranno presentati come percorsi URL che useranno sempre un/so che sto bene solo per usare sempre /? E grazie per le informazioni su/sempre supportate. – semicolon