نسخ الملفات إلى مسار الشبكة أو محرك الأقراص باستخدام Python على OSX
-
29-09-2019 - |
سؤال
لدي سؤال مماثل مثل الشخص الذي طرح هنا ولكني أحتاجه للعمل على OSX.
كيفية نسخ الملفات إلى مسار الشبكة أو القيادة باستخدام Python
لذلك أريد حفظ ملف على مشاركة شبكة SMB. هل يمكن هذا؟
شكرًا!
المحلول
نعم ، يمكن القيام به. أولاً ، قم بتركيب مشاركة شبكة SMB الخاصة بك على نظام الملفات المحلي عن طريق الاتصال بأمر مثل هذا من Python:
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
الوحدة النمطية ثم استدعاء الأوامر المناسبة.