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,列示出来的共享名,都可以作为该参数的值(资源列不为空的部分)。