ここで尋ねられたのと同様の質問がありますが、OSXで動作する必要があります。
Python を使用してファイルをネットワーク パスまたはドライブにコピーする方法
だから、SMBネットワーク共有にファイルを保存したい。これはできますか?
ありがとう!
ここで尋ねられたのと同様の質問がありますが、OSXで動作する必要があります。
Python を使用してファイルをネットワーク パスまたはドライブにコピーする方法
だから、SMBネットワーク共有にファイルを保存したい。これはできますか?
ありがとう!
はい、できます。まず、Python から次のようなコマンドを呼び出して、SMB ネットワーク共有をローカル ファイルシステムにマウントします。
mount -t smbfs //user@server/sharename share
(subprocess
モジュールを使用してそれを行うことができます)。share
SMBネットワーク共有がマウントされるディレクトリの名前であり、ユーザーが書き込み可能である必要があると思います. その後、を使用してファイルをコピーできます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 つを組み合わせることができます。