проверить, существует ли каталог samba в python3 - PullRequest
1 голос
/ 10 апреля 2019

У меня есть каталог samba smb: //172.16.0.10/public_pictures/, и я хотел бы знать, доступен ли он.

Попробуйте что-то вроде следующего:

import urllib

if open("smb://172.16.0.10/public_pictures/"):
    print("accessible")
else:
    print("no accessible")

но, очевидно, это не работает для меня

Ответы [ 2 ]

0 голосов
/ 10 апреля 2019

Один из способов обработки самбы - использовать pysmb.Если так, то это выглядит примерно так:

# we need to provide localhost name to samba
hostname = socket.gethostname()
local_host = (hostname.split('.')[0] if hostname 
              else "SMB{:d}".format(os.getpid()))

# make a connection
cn = SMBConnection(
    <username>, <password>, local_host, <netbios_server_name>,
    domain=<domain>, use_ntlm_v2=<use_ntlm_v2>, 
    is_direct_tcp=<self.is_direct_tcp>)

# connect
if not cn.connect(<remote_host>, <remote_port>):
    raise IOError

# working connection ... to check if a directory exists, ask for its attrs
attrs = cn.getAttributes(<shared_folder_name>, <path>, timeout=30)

Некоторые примечания:

  • в приведенном выше примере public_pictures - это shared folder, тогда какpath будет просто /

  • , вам необходимо знать, используете ли вы SMB для порта 139 или 445 (или пользовательский порт).Если последнее вам обычно требуется передать is_direct_tcp=True (хотя некоторые серверы все еще будут обслуживать самбу NetBIOS на 445)

  • , если вы ожидаете, что вам не понадобится имя пользователя или пароль, тогдавероятно, вы ожидаете подключения как username="guest" с пустым паролем.

0 голосов
/ 10 апреля 2019

Использование pysmb ( docs ):

from smb.SMBConnection import SMBConnection

remote_address = "172.16.0.10"
share_name = "public_pictures"

conn = SMBConnection(username, password, name, remote_name)
conn.connect(remote_address)

accessible = share_name in conn.listShares()
...