Chemin absolu d'un fichier objet
Cela a été discuté sur StackOverflow avant - je suis en train d'essayer de trouver un bon moyen de trouver le chemin absolu d'un fichier objet, mais j'en ai besoin pour être robuste aux os.chdir()
, ne peut donc pas utiliser
f = file('test')
os.path.abspath(f.name)
Au lieu de cela, je me demandais si ce qui suit est une bonne solution - essentiellement l'extension du fichier de classe ainsi que sur l'ouverture, le chemin d'accès absolu du fichier est enregistré:
class File(file):
def __init__(self, filename, *args, **kwargs):
self.abspath = os.path.abspath(filename)
file.__init__(self, filename, *args, **kwargs)
Alors on peut faire
f = File('test','rb')
os.chdir('some_directory')
f.abspath # absolute path can be accessed like this
Sont les risques à cela?
Un descripteur de fichier ouvert peut avoir plusieurs liens et -- donc -- plusieurs noms de chemin d'accès absolu. Vous êtes en train de faire à l'envers. Pourquoi n'êtes-vous pas le calcul d'une voie d'abord, puis en ouvrant le fichier avec chemin d'accès absolu?
Quelques liens vers des AINSI en question serait utile dans la première ligne
Quelques liens vers des AINSI en question serait utile dans la première ligne
OriginalL'auteur astrofrog | 2010-03-16
Vous devez vous connecter pour publier un commentaire.
Un risque important, c'est que, une fois que le fichier est ouvert, le processus est de traiter avec ce fichier par son descripteur de fichier, pas son chemin. Sur de nombreux systèmes d'exploitation, le chemin d'accès du fichier peut être modifié par un autre processus (par un
mv
opération dans un autre processus, par exemple) et le descripteur de fichier est toujours valide et fait référence au même fichier.J'ai souvent prendre avantage de cette, par exemple, à partir d'un téléchargement d'un gros fichier, puis de la réalisation du fichier de destination n'est pas là où je le veux, et de saut à un autre shell et en le déplaçant vers la droite endroit – tout le téléchargement se poursuit sans interruption.
C'est donc un mauvaise idée de dépendre sur le chemin reste le même pour la durée de vie du processus, quand il n'y a pas une telle garantie donnée par le système d'exploitation.
OriginalL'auteur bignose
Cela dépend de ce que vous en avez besoin pour.
Aussi longtemps que vous comprenez les limites, quelqu'un pourrait les déplacer, les renommer, ou lien dur le fichier dans l'intervalle--il y a beaucoup d'utilisations appropriées pour cela. Vous souhaiterez peut-être supprimer le fichier lorsque vous avez terminé avec elle ou si quelque chose se passe mal lors de l'écriture (ex. gcc n'est présent lors de l'écriture de fichiers):
Si vous voulez juste être en mesure d'identifier le fichier des messages de l'utilisateur, il y a déjà de fichier.nom. Il est impossible de l'utiliser (de façon fiable) pour autre chose, malheureusement, il n'y a aucun moyen de distinguer entre un nom de fichier "
<stdin>
" et sys.stdin, par exemple.(Vous ne devriez vraiment pas avoir de dériver à partir d'une interface de classe juste pour ajouter des attributs, c'est juste une vilaine incompatible caprice de Python...)
OriginalL'auteur Glenn Maynard