Python: Accéder à Windows lecteur réseau mappé avec une URL connue, mais inconnu de la lettre de lecteur
Je suis en train d'écrire un script Python qui peuvent se déplacer et copier des fichiers sur un serveur Linux distant. Cependant, je ne peux pas supposer que tout le monde exécute le script (sur Windows) ont cartographié ce serveur pour la même lettre. Plutôt que de demander aux utilisateurs pour la bonne lettre, je veux simplement l'accès au serveur par le réseau de l'URL, l'une qui est la lettre de lecteur mappé. Ainsi, par exemple, si j'ai mappé l'URL du serveur
\\name-of-machine.site.company.com
Lecteur S:\, je veux accéder, par exemple, le fichier S:\var\SomeFile.txt dans une lettre de lecteur agnostique. J'ai regardé autour et la recommandation générale semble être d'utiliser la notation UNC:
f = open(r"\\name-of-machine.site.company.com\var\SomeFile.txt", "w")
Mais si j'essaie de cela, un IOError en disant: il n'y a aucun fichier ou répertoire. Si j'essaie, à l'aide de l'adresse IP du serveur à la place (pas l'adresse réelle, mais similaire):
f = open(r"\.1.123.149\var\SomeFile.txt", "w")
- Je obtenir, après une longue pause, un IO Erreur: "invalid mode ("w") ou un nom de fichier". Pourquoi ces notations ne fonctionne pas, et comment puis-je accéder à ce serveur (idéalement comme si c'était un disque local) par son URL?
OriginalL'auteur dpitch40 | 2012-10-04
Vous devez vous connecter pour publier un commentaire.
Pas très élégant, mais vous pourriez tout simplement essayer tous les lecteurs?
De ici:
Alors vous pouvez utiliser
os.path.exists()
sur tous les drive:\var\SomeFile.txt jusqu'à ce que vous trouver la bonne.Où est la documentation pour win32api?
Ici, par exemple.
J'ai peut-être utiliser cette. Est-il un moyen de vérifier l'adresse de chaque lettre est mappé?
OriginalL'auteur Junuxx
Solution facile est d'utiliser des barres obliques pour spécifier le Nom Universel de la Convention (UNC):
Trouvé cette solution dans un autre thread, et a estimé qu'il serait pertinent ici. Voir le thread d'origine ci-dessous:
À l'aide de Python, comment puis-je accéder à un dossier partagé sur un réseau windows?
de même, un coup de pouce à partir d'ici, il correspondait par qoogle requête à la lettre. (et google m'a amené ici, donc, merci) - en outre, cette solution ne permet en effet de résoudre le problème ici, et je ne vois pas comment cette question diffère
OriginalL'auteur UnNatural
Si vous pouvez réserver une lettre de lecteur pour cette tâche, et vous avez les privilèges, alors vous pouvez exécuter "net use ..." à partir de python et ensuite utiliser que fixe la lettre de lecteur pour lire/écrire des fichiers.
http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/net_use.mspx?mfr=true
Il ya d'innombrables autres façons d'accéder à des fichiers sur un serveur linux. Vous pouvez utiliser DAV, par exemple. ikeepincloud.com/en/python_library Mais vraiment il ya tellement de nombreux protocoles et client libs qu'il est difficile de les énumérer tous. J'ai sélectionné webdav comme exemple parce que c'est exactement ce dont vous avez besoin, et il est facile à installer. À l'aide de réseau de windows est un cauchemar de toute façon...
OriginalL'auteur nagylzs
Essayez d'utiliser le nom court au lieu du nom complet. En vous exemple qui serait
\\name-of-machine\var\SomeFile.txt
.Edit:
Bon, maintenant, je me sens comme un mannequin -- j'espère que vous aurez l'impression qu'un avec moi! 😉
Le nom de la machine est
name-of-machine.site.company.com
, et le dossier et nom de fichier est\var\SomeFile.txt
-- quel est le nom de partage? En d'autres termes, votre chemin d'accès doit être quelque chose comme:OriginalL'auteur Ethan Furman