35
39

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PythonでWindows共有フォルダへアクセス

Last updated at Posted at 2017-10-09

2018/4/23 追記

より詳細な使い方の記事を書きました。

pysmbの使い方(接続・切断)
pysmbの使い方(ファイル受信)
pysmbの使い方(ファイル送信)
pysmbの使い方(ロギング)


pythonでWindows共有フォルダへアクセスしたい場合、
pysmbパッケージを使用しsambaで接続する。
http://pysmb.readthedocs.io/en/latest/index.html

##実行環境
python 3.5.3
pysmb 1.1.19

##インストール
pipでインストールする。
pip install pysmb

##使い方

###ファイルリストの取得
\\<ip_address>\temp\a\b\cのファイルリストを取得する場合

samba_test.py
# !/usr/bin/env python
# coding:utf-8

import platform
from smb.SMBConnection import SMBConnection

if __name__ == "__main__":

    # connection open
    conn = SMBConnection(
        '<user>',
        '<password>',
        platform.uname().node,
        '<remote_hostname>',
        domain='WORKGROUP',
        use_ntlm_v2=True)
    conn.connect('<ip_address>', 139)

    items = conn.listPath('temp', 'a/b/c')
    print([item.filename for item in items])

    conn.close()
  • itemsへはSharedFileクラスのリストが返される。
  • tempおよびa/b/cが存在しない場合は当然エラーとなる。
  • domainは指定しなくても繋がるよう、domain=''でもOK

###ファイルの取得
\\<ip_address>\temp\a\b\c\hoge.txt/var/hogeとして保存する。

samba_test.py
# !/usr/bin/env python
# coding:utf-8
""" samba_test.py """

import platform
from smb.SMBConnection import SMBConnection

if __name__ == "__main__":

    # connection open
    conn = SMBConnection(
        '<user>',
        '<password>',
        platform.uname().node,
        '<remote_hostname>',
        domain='WORKGROUP',
        use_ntlm_v2=True)
    conn.connect('<ip_address>', 139)

    with open('/var/hoge', 'wb') as file:
        conn.retrieveFile('temp', 'a/b/c/hoge.txt', file)

    conn.close()
  • ファイル自体は不要で、中身だけ知りたい場合はBytesIOを使う

    samba_test.py
    import io
    
    with io.BytesIO() as file:
        conn.retrieveFile('temp', 'a/b/c/hoge.txt', file)
        file.seek(0)
        print([line.decode() for line in file])
    

###ファイルを送る
/var/hoge\\<ip_address>\temp\a\b\c\hoge.txtとして保存する。

samba_test.py
# !/usr/bin/env python
# coding:utf-8
""" samba_test.py """

import platform
from smb.SMBConnection import SMBConnection

if __name__ == "__main__":

    # connection open
    conn = SMBConnection(
        '<user>',
        '<password>',
        platform.uname().node,
        '<remote_hostname>',
        domain='WORKGROUP',
        use_ntlm_v2=True)
    conn.connect('<ip_address>', 139)

    with open('/var/hoge', 'rb') as file:
        conn.storeFile('temp', 'a/b/c/hoge.txt', file)

    conn.close()
  • ディレクトリa/b/cが存在しない場合はエラーになるので事前に作成しておく必要がある。
35
39
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
35
39

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?