web-dev-qa-db-fra.com

accéder aux fichiers distants sur le serveur avec le protocole smb python3

J'ai un serveur distant avec quelques fichiers.

smb://ftpsrv/public/

Je peux y être autorisé en tant qu'utilisateur anonyme. En Java je pourrais simplement écrire un tel code

SmbFile root = new SmbFile(SMB_ROOT);

Et avoir la possibilité de travailler avec des fichiers à l'intérieur (c'est tout ce dont j'ai besoin, une rangée!), Mais je ne trouve pas comment gérer cette tâche en python3, il y a beaucoup de ressources, mais je pense qu'elles ne sont pas pertinentes pour moi, car ils sont souvent adaptés à python2 et aux anciennes approches. Existe-t-il un moyen simple, similaire à Java ci-dessus? Ou quelqu'un peut-il fournir une vraie solution de travail si, par exemple, je veux accéder au fichier fgg.txt Dans smb://ftpsrv/public/ Y a-t-il une bibliothèque vraiment pratique pour résoudre ce problème?

Par exemple sur site

import tempfile
from smb.SMBConnection import SMBConnection

# There will be some mechanism to capture userID, password, client_machine_name, server_name and server_ip
# client_machine_name can be an arbitary ASCII string
# server_name should match the remote machine name, or else the connection will be rejected
conn = SMBConnection(userID, password, client_machine_name, server_name, use_ntlm_v2 = True)
assert conn.connect(server_ip, 139)

file_obj = tempfile.NamedTemporaryFile()
file_attributes, filesize = conn.retrieveFile('smbtest', '/rfc1001.txt', file_obj)

# Retrieved file contents are inside file_obj
# Do what you need with the file_obj and then close it
# Note that the file obj is positioned at the end-of-file,
# so you might need to perform a file_obj.seek() if you need
# to read from the beginning
file_obj.close()

Suis-je sérieusement obligé de fournir tous ces détails conn = SMBConnection(userID, password, client_machine_name, server_name, use_ntlm_v2 = True)?

5
Alex

Un exemple simple d'ouverture d'un fichier en utilisant urllib et pysmb dans Python 3

import urllib
from smb.SMBHandler import SMBHandler
opener = urllib.request.build_opener(SMBHandler)
fh = opener.open('smb://Host/share/file.txt')
data = fh.read()
fh.close()

Je n'ai pas de partage anonyme SMB prêt à le tester, mais ce code devrait fonctionner.
urllib2 est le paquet python 2, dans python 3 il a été renommé simplement urllib et certaines choses ont été déplacées).

1
Rick Rongen