Я ищу некоторую помощь по логике, код не очень Pythonic. Я все еще участвую. Мы постоянно отображаем диск Z: в разные местоположения. Вот то, что я пытаюсь выполнитьPython - Проверить сетевую карту
1: Проверьте наличие старой карты на Z: скажу \ 192.168.1.100 \ старого
2: Карта нового местоположения в Z: сказать \ 192.168.1.200 \ нового
3: Убедитесь, что новый Z: отображение существует и до сих пор подключен
4: Если обрывается или некартированное переподключение его и зарегистрировать ее
90% коды работает, если я запускаю его как есть, она снимает отображение старый диск и отображает новый диск, но имя старого диска остается неизменным, даже если оно сопоставлено с новым местоположением, и я могу просмотреть его. Другая проблема заключается в том, что я хочу только запустить checkOldDrive один раз и просто позволить checkDrive запустить. Любые советы приветствуются.
#!/usr/bin/python
import pywintypes
import win32com.client
import os.path
import sys
import string
import fileinput
import time
import win32net
##################################################################
# Check for old Z: map and remove it
# Map the new instance of Z:
# Check if the Z: drive exists
# if the drive exists report to status.log we are working
# if the drive DOES NOT exist map it and report errors to the log
###################################################################
def checkDrive():
if os.path.exists('z:'):
saveout = sys.stdout
fsock = open('status.log', 'a')
sys.stdout = fsock
print os.getenv("COMPUTERNAME"), " - ", time.ctime(), " - Connected"
sys.stdout = saveout
fsock.close()
else:
ivvinetwork = win32com.client.Dispatch('Wscript.Network')
network_drives = ivvinetwork.EnumNetworkDrives()
for mapped_drive in [network_drives.Item(i)
for i in range(0, network_drives.Count() -1 , 2)
if network_drives.Item(i)]:
ivvinetwork.RemoveNetworkDrive(mapped_drive, True, True)
drive_mapping = [
('z:', '\\\\192.168.1.100\\newmap', 'someuser', 'somepass')]
for drive_letter, network_path, user_name, user_pass in drive_mapping:
try:
ivvinetwork.MapNetworkDrive(drive_letter, network_path, True, user_name, user_pass)
saveout = sys.stdout
fsock = open('status.log', 'a')
sys.stdout = fsock
print os.getenv("COMPUTERNAME"), " - ", time.ctime(), " - ", drive_mapping, "Drive Has Been Mapped"
sys.stdout = saveout
fsock.close()
except Exception, err:
saveout = sys.stdout
fsock = open('status.log', 'a')
sys.stdout = fsock
print os.getenv("COMPUTERNAME"), " - ", time.ctime(), " - ", err
sys.stdout = saveout
fsock.close()
def checkOldDrive():
if os.path.exists('z:'):
ivvinetwork = win32com.client.Dispatch('Wscript.Network')
network_drives = ivvinetwork.EnumNetworkDrives()
for mapped_drive in [network_drives.Item(i)
for i in range(0, network_drives.Count() -1 , 2)
if network_drives.Item(i)]:
ivvinetwork.RemoveNetworkDrive(mapped_drive, True, True)
checkOldDrive()
checkDrive()
Я просто понял, что есть большая ошибка при использовании попарного. Это не правильная функция, и это случилось только в моей среде, потому что у меня была только одна буква диска. Я исправлю это и опубликую и отредактирую в ближайшее время. –
Спасибо за 'getDriveMappings()' и 'getUNCForDrive()' для извлечения информации с помощью win32 api, это именно то, что я искал с тех пор ... :-) – tim