نسخ الملفات إلى مسار الشبكة أو محرك الأقراص باستخدام Python على OSX

StackOverflow https://stackoverflow.com/questions/3090724

سؤال

لدي سؤال مماثل مثل الشخص الذي طرح هنا ولكني أحتاجه للعمل على 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 الوحدة النمطية ثم استدعاء الأوامر المناسبة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top