2017-08-07 37 views
0

私はPythonを使用して私たちのSambaサーバー上のファイルにアクセスしようとしています。私はこれにSambaクライアントを使う必要があることを知ったので、PySmbClientを使い始めました。これを行う方法についてオンラインで多くの例があるにもかかわらず、私はちょうど働きたくありません。下記参照。Python経由でSambaサーバー上のファイルにアクセスできません

smb = smbclient.SambaClient(server="192.168.0.320", share="DATA", domain="WORKGROUP",username="admin", password="abc123") 
f = smb.open('test.json', 'r') 

これは、次のエラー生成:以下のトレースと

OSError: [Errno 2] No such file or directory 

:私は読んで、多くの "ソリューション" を実装しました

Traceback (most recent call last): 
    File "create_dataset.py", line 35, in <module> 
    f = smb.open('serverSaver.txt', 'r') 
    File "/home/grant/Development/create_dataset/env/local/lib/python2.7/site-packages/smbclient.py", line 408, in open 
    f = _SambaFile(self, path, mode) 
    File "/home/grant/Development/create_dataset/env/local/lib/python2.7/site-packages/smbclient.py", line 448, in __init__ 
    connection.download(remote_name, self._tmp_name) 
    File "/home/grant/Development/create_dataset/env/local/lib/python2.7/site-packages/smbclient.py", line 393, in download 
    result = self._runcmd('get', remote_path, local_path) 
    File "/home/grant/Development/create_dataset/env/local/lib/python2.7/site-packages/smbclient.py", line 184, in _runcmd 
    return self._raw_runcmd(fullcmd) 
    File "/home/grant/Development/create_dataset/env/local/lib/python2.7/site-packages/smbclient.py", line 168, in _raw_runcmd 
    stdout=subprocess.PIPE, stderr=subprocess.STDOUT) 
    File "/usr/lib/python2.7/subprocess.py", line 711, in __init__ 
    errread, errwrite) 
    File "/usr/lib/python2.7/subprocess.py", line 1343, in _execute_child 
    raise child_exception 

を、これまでのところ何ものために働いていません私。私は私のファイルマネージャを使って与えられた資格情報でSambaサーバにアクセスすることができます。そのため、これらの値はうまくいくはずです。私は私たちのシステム管理者に話していて、彼は何が間違っているのか分からない。

これは私が書いた単純なコード以上のものでなければなりません。物事のサーバー側に問題があると思いますか? SambaClientに入力した値で何か?この時点では、私は解決策につながる何かにはかなり開いています。

答えて

1

Linux Samba共有からWindowsラップトップにファイルを転送するためのコードです。それはまた、他の方向(Linuxクライアント、Windowsサーバー)で正常に動作することがわかっています。

私は、pysmbライブラリのバージョン1.1.19(最新)とPython 2.7.1を使用しています。

pysmbパッケージの場合はthe pysmb siteを参照してください。実際にダウンロードして、tarballとsetup.pyから直接ダウンロードしてインストールしました.pipはエラーを投げかけていました。

pysmbパッケージはユーザフレンドリーではありませんが、Windowsクライアントではうまく機能します。

私はsmb.confファイルに次のエントリを使用して、ユーザーのためのLinuxマシン上で「エドワーズ」を「my_share」と呼ばれる共有を設定:

[my_share] 
path = /home/edwards 
valid_users = edwards 
read only = no 
guest ok = yes 
browseable = yes 

そして上のファイルを一覧表示するには、次のコードを使用共有し、私のラップトップに「rti_license.dat」と呼ばれるファイルをダウンロードします。サーバー名が正しくなければならないか、接続が動作しないこと

import tempfile 
import smb 
import shutil 

from smb.SMBConnection import SMBConnection 

share_name   = "my_share" 
user_name   = "edwards" 
password   = "######"    # secret :-) 
local_machine_name = "laptop"    # arbitrary 
server_machine_name = "edwards-Yocto"  # MUST match correctly 
server_IP   = "192.162.2.1"  # as must this    

# create and establish connection 
conn = SMBConnection(user_name, password, local_machine_name, server_machine_name, use_ntlm_v2 = True) 

assert conn.connect(server_IP, 139) 

# print list of files at the root of the share 
files = conn.listPath(share_name, "/") 
for item in files: 
    print item.filename 

# check if the file we want is there 
sf = conn.getAttributes(share_name, "rti_license.dat") 
print sf.file_size 
print sf.filename 

# create a temporary file for the transfer 
file_obj = tempfile.NamedTemporaryFile(mode='w+t', delete=False) 
file_name = file_obj.name 
file_attributes, copysize = conn.retrieveFile(share_name, "rti_license.dat", file_obj) 
print copysize 
file_obj.close() 

# copy temporary file 
shutil.copy(file_name, "rti_license.dat") 

# close connection 
conn.close() 

注(Linuxマシンから、それはhostnameコマンドの出力です)

これが役に立つと願っています。

+0

私はpysmbに切り替えて、バットからすぐに仕事を得ました。ご協力いただきありがとうございます。 – grantathon

関連する問題