6

ここで尋ねられたのと同様の質問がありますが、OSXで動作する必要があります。

Python を使用してファイルをネットワーク パスまたはドライブにコピーする方法

だから、SMBネットワーク共有にファイルを保存したい。これはできますか?

ありがとう!

4

1 に答える 1

19

はい、できます。まず、Python から次のようなコマンドを呼び出して、SMB ネットワーク共有をローカル ファイルシステムにマウントします。

mount -t smbfs //user@server/sharename share

subprocessモジュールを使用してそれを行うことができます)。shareSMBネットワーク共有がマウントされるディレクトリの名前であり、ユーザーが書き込み可能である必要があると思います. その後、を使用してファイルをコピーできますshutil.copyfile。最後に、SMB ネットワーク共有をアンマウントする必要があります。

umount share

おそらく、マウントとアンマウントを処理するコンテキスト マネージャーを Python で作成するのが最適です。

from contextlib import contextmanager
import os
import shutil
import subprocess

@contextmanager
def mounted(remote_dir, local_dir):
    local_dir = os.path.abspath(local_dir)
    retcode = subprocess.call(["/sbin/mount", "-t", "smbfs", remote_dir, local_dir])
    if retcode != 0:
        raise OSError("mount operation failed")
    try:
        yield
    finally:
        retcode = subprocess.call(["/sbin/umount", local_dir])
        if retcode != 0:
            raise OSError("umount operation failed")

with mounted(remote_dir, local_dir):
    shutil.copy(file_to_be_copied, local_dir)

上記のコード スニペットはテストされていませんが、一般的には機能するはずです (私が気付かなかった構文エラーは別として)。また、他の回答で投稿しmountedたコンテキストマネージャーと非常に似ていることに注意してください。モジュールnetwork_share_authを使用しているプラ​​ットフォームを確認してからplatform、適切なコマンドを呼び出すことで、2 つを組み合わせることができます。

于 2010-06-22T09:07:34.157 に答える