Copiare i file di percorso di rete o guidare utilizzando python su OSX
-
29-09-2019 - |
Domanda
Ho una domanda simile come quella che ha chiesto qui, ma ho bisogno di lavorare su OSX.
Come copiare i file al percorso di rete o con Python
Quindi voglio salvare un file in una condivisione di rete SMB. questo può essere fatto?
Grazie!
Soluzione
Sì, si può fare. In primo luogo, montare il condivisione di rete SMB al file system locale chiamando il comando come questo da Python:
mount -t smbfs //user@server/sharename share
(è possibile farlo utilizzando il modulo subprocess
). share
è il nome della directory in cui la condivisione di rete SMB verrà montato, e credo che deve essere scrivibile dall'utente. Dopo di che, è possibile copiare il file usando shutil.copyfile
. Infine, è necessario un-montare la condivisione di rete SMB:
umount share
Probabilmente è il migliore per creare un gestore di contesto in Python che si occupa di montaggio e smontaggio:
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)
Il frammento di codice di cui sopra non è testato, ma dovrebbe funzionare in generale (a parte gli errori di sintassi che non ho notato). Si noti inoltre che mounted
è molto simile al contesto network_share_auth
direttore ho pubblicato nella mia altra risposta, quindi si potrebbe anche combinare le due cose controllando quale piattaforma si è in utilizzando il modulo platform
e quindi chiamando i comandi appropriati.