Ben os.system
kullanarak NET USE
komutunu çağırarak kullanılmayan bir sürücü harfi için pay haritalama denemek istiyorum (Windows üzerinde olduğunu varsayarsak):
os.system(r"NET USE P: \\ComputerName\ShareName %s /USER:%s\%s" % (password, domain_name, user_name))
bir sürücü harfine payını eşlenen sonra, yapabilirsiniz Dosyayı belirtilen sürücüye kopyalamak için shutil.copyfile
kullanın. Son olarak, pay kaldırmak olmalıdır:
os.system(r"NET USE P: /DELETE")
bu sadece Windows üzerinde çalışır Tabii ve sürücü harfi P mevcut olduğundan emin olmak gerekir. Bağlantının başarılı olup olmadığını görmek için NET USE
komutunun dönüş kodunu kontrol edebilirsiniz; Yoksa, başarılı olana kadar farklı bir sürücü harfi deneyebilirsiniz.
İki NET USE
komutu iki yana geldiğinden ve ikincisinin her ikisi de ilk çalıştırıldığında çalıştırılmalıdır (aralarında bir istisna ortaya çıkmış olsa bile), bu iki aramayı bağlam yöneticisine daha sonra Python 2.5 veya kullandığınız:
from contextlib import contextmanager
@contextmanager
def network_share_auth(share, username=None, password=None, drive_letter='P'):
"""Context manager that mounts the given share using the given
username and password to the given drive letter when entering
the context and unmounts it when exiting."""
cmd_parts = ["NET USE %s: %s" % (drive_letter, share)]
if password:
cmd_parts.append(password)
if username:
cmd_parts.append("/USER:%s" % username)
os.system(" ".join(cmd_parts))
try:
yield
finally:
os.system("NET USE %s: /DELETE" % drive_letter)
with network_share_auth(r"\\ComputerName\ShareName", username, password):
shutil.copyfile("foo.txt", r"P:\foo.txt")
Merhaba, etki alanı adı argümanı nedir? – user218976
Etki alanı adı bağımsız değişkeni, kullanıcı kimliği doğrulandığında farklı bir auth etki alanı altındaysa kullanılabilir. Ben onu contextlib versiyonuna eklemedim, çünkü sadece kullanıcı adının bir parçası olabilir. Kimlik doğrulaması yapılan kullanıcı mevcut kullanıcıyla aynı alanda ise, alan ihmal edilebilir. –
Teşekkürler ... işe yaradı ... sadece ikinci kez çalıştırdığımda, yerel cihazın kullanımda olduğunu söyleyen bir hata alıyorum. – user218976