使用身份验证

时间:2015-12-02 09:00:59

标签: python authentication networking copy openerp

我在我的linux服务器上运行了一个Odoo8,我需要将一个文件从这个服务器复制到一个带有身份验证的Windows 10共享文件夹。 我尝试以编程方式执行此操作:

full_path = "smb://hostname/shared_folder/other_path"
if not os.path.exists(full_path):
    os.makedirs(full_path)
full_path = os.path.join(full_path, file_name)
bin_value = stream.decode('base64')
if not os.path.exists(full_path):
    try:
        with open(full_path, 'wb') as fp:
            fp.write(bin_value)
            fp.close()
        return True
    except IOError:
        _logger.exception("stream_save writing %s", full_path)

但即使没有引发异常,也不会创建文件夹并且不会写入文件。 然后我尝试从uri中删除“smb:”部分,并引发了有关身份验证的异常。

我想通过使用python解决问题,可能避免使用os.system调用或外部脚本,但如果没有其他办法可行,那么欢迎任何建议。

我也试过

"//user:password@hostname"

"//domain;user:password@hostname"

有和没有smb

1 个答案:

答案 0 :(得分:1)

好吧,我自己发现了一种使用SAMBA的方法:

首先你需要安装pysmb( pip install pysmb )然后:

from smb.SMBConnection import SMBConnection
conn = SMBConnection(user, password, "my_name", server, domain=domain, use_ntlm_v2 = True)
conn.connect(ip_server)
conn.createDirectory(shared_folder, sub_directory)
file_obj = open(local_path_file,'rb')
conn.storeFile(shared_folder, sub_directory+"/"+filename, file_obj)
file_obj.close()

在我的情况下 sub_directory 是一个完整的路径,因此我需要逐个创建每个文件夹( createDirectory 只能这样工作),每次我需要检查是否该目录尚不存在,否则createDirectory引发异常。

我希望我的解决方案对其他人有用。

如果有人找到更好的解决方案,请回答......