7

Ubuntu で python-smbc ライブラリを使用して、samba 共有にアクセスしています。ディレクトリ構造には問題なくアクセスできますが、実際のファイルとそのコンテンツにアクセスする方法がわかりません。Web ページ ( https://fedorahosted.org/pysmbc/ ) には何も言及されていません。コードは C/C++ で書かれており、ドキュメントがほとんどないため、使用方法がよくわかりません。

私が知っているのは、Context.open (ファイル用) が uri、フラグ、およびモードを取るということですが、フラグとモードが何であるかはわかりません。

誰かがこのライブラリを使用したことがありますか、またはそれを使用してファイルを読み取る方法の例がありますか?

もちろん理想的な状況は smbfs マウントを使用することでしたが、smbmount を使用して同じ共有をマウントすると、すべてのフォルダーが空になります。同じ資格情報を使用して smbclient で問題なく参照できますが。

4

5 に答える 5

11

また、smbfs (ランダムなシステム ロックダウンと再起動) の使用に問題があり、迅速な回答が必要でした。

モジュールも試しましたsmbcが、データを取得できませんでした。あなたと同じように、ディレクトリ構造にアクセスするところまで行きました。

時間切れになり、コードを配信する必要があったため、ショートカットを使用しました。

smbclient" " 呼び出しの周りに小さなラッパーを書きました。それはハック、醜い、本当に醜いですが、私のニーズには合っています。私が働いている会社の生産で使用されています。

使用例を次に示します。

>>> smb = smbclient.SambaClient(server="MYSERVER", share="MYSHARE", 
                                username='foo', password='bar', domain='baz')
>>> print smb.listdir(u"/")
[u'file1.txt', u'file2.txt']
>>> f = smb.open('/file1.txt')
>>> data = f.read()
>>> f.close()
>>> smb.rename(u'/file1.txt', u'/file1.old')

私の前のプログラマーは、多くの smbclient 呼び出しで「bash」ファイルを使用していたので、私のソリューションは少なくとも優れていると思います。

こちらにアップしましたので、よかったら使ってください。Bitbucket リポジトリはこちらです。より良い解決策を見つけたら教えてください。私のコードも置き換えます。

于 2009-06-12T22:56:51.300 に答える
3

オープン コンテキストがある場合 (単体テストはこちらを参照)
* https://github.com/ioggstream/pysmbc/tree/master/tests

suri =  'smb://' + settings.SERVER + '/' + settings.SHARE + '/test.dat'  
dpath = '/tmp/destination.out'

# open smbc uri
sfile = ctx.open(suri, os.O_RDONLY)

# open local target where to copy file
dfile = open(dpath, 'wb')

#copy file and flush
dfile.write(sfile.read())
dfile.flush()

#close both files
sfile.close()    
dfile.close()

コンテキストを開くには、認証関数を定義するだけです

ctx = smbc.Context()

def auth_fn(server, share, workgroup, username, password):
    return (workgroup, settings.USERNAME, settings.PASSWORD)

ctx.optionNoAutoAnonymousLogin = True
ctx.functionAuthData = auth_fn
于 2012-07-09T10:27:23.397 に答える
1

ディレクトリ構造を取得できた場合は、作業コンテキストがあります。実際にファイルにアクセスするための鍵は、文書化されていない の flags 引数ですContext.open。(どちらのモードがどのモードなのかはわかりませんが、必要ではないようです。)

flags必要なファイルへのアクセスの種類を pysmbc に伝える方法です。|これを行うには、os モジュールのフラグをビットごとに ORing () して作成した整数を渡します。具体的には、必要なフラグまたは接尾辞を付けたフラグですos.O_(Python ドキュメントのリストを参照してください)。

たとえば、フラグを設定するファイルに書き込むにはos.O_WRONLY(組み込み関数"w"のモード パラメーターとして使用するのと同等) open、既に存在する可能性のあるファイルに追加するにはos.O_WRONLY | os.O_APPEND | os.O_CREAT(に同等"a+") を使用します。

その呼び出しは、file通常のローカル ファイルと同じように使用できるオブジェクトを返します。

于 2012-11-19T15:50:31.363 に答える
-3

私はsmbfsに固執します。これらの共有ファイルに Python 以外でアクセスしたくなるのは時間の問題です。

于 2009-06-12T20:02:38.940 に答える