pysmb OperationFailure, service_name到底是什么东西?

使用到pysmb库,就不可避免地被要求提供service_name

listPath()、retrieveFile()、storeFile()……

listPath()函数来说,凭直觉尝试一下:

listPath('server', 'shared_folder')
listPath('\\\\server', '\\shared_folder')
listPath('\\\\server\\shared_folder', '\\')

都以报错告终……(因为这里不会涉及server。)

函数说明

看来不能轻易蒙混过关了,还是认真啃函数说明吧:

service_name – the name of the shared folder for the *path*

path – path relative to the *service_name* where we are interested to learn about its files/sub-folders.

直译中文是:service_name*path*的共享文件夹的名字,而path是需要读取的文件夹,是个相对路径。

共享文件夹的名字

难道是这样:listPath('shared_folder', '\\shared_folder') ?

很遗憾,还是不对。

不过,这已经接近答案了。

主要的问题是,path是一个相对路径,相对shared folder的路径,应该是shared folder的下级路径。

所以正确的理解应该是:service_name就是共享文件夹名称,而path则是共享文件夹的相对路径(本身或下级)。

因此,listPath('shared_folder', '\\')或者listPath('shared_folder', ''),又或者listPath('shared_folder', 'sub_folder')都是OK的。

示例:

from smb.SMBConnection import SMBConnection

host = '192.168.0.1'  # 远程服务器IP
username = 'administrator'  # 远程服务器用户
password = 'Mon'sWork'
my_name = 'Omega-PC'  # 本机机器名
remote_name = 'M-86'  # 远程服务器机器名

conn = SMBConnection(username, password, my_name, remote_name)
conn.connect(host, 139)  # 也有可能是445

# 列出共享文件夹SoftWare下的文件名、创建时间
for i in conn.listPath('SoftWare', '\\'):
    print(i.filename, i.create_time)

service_name到底是什么东西?

广泛读了网上很多资料,service_name其实是相对于发布共享的机器而言的,

发布共享机器上的命令行窗口运行net share,列示出来的共享名,都可以作为该参数的值(资源列不为空的部分)。

 

posted @ 2020-12-08 18:46  Mon's_Works  阅读(779)  评论(0编辑  收藏  举报