Python - Check network map
<p>I'm looking for some help on logic, the code is not very Pythonic I'm still learning. We map the Z: drive to different locations all the time. Here is what I'm trying to accomplish</p>

<p>1: Check for an old map on Z: say \192.168.1.100\old <br>
2: Map the new location to Z: say \192.168.1.200\new<br>
3: Make sure the new Z: mapping exists and is still connected<br>
4: If it gets disconnected or unmapped reconnect it and log it<br></p>

<p>90% of the code works, if I run it as is, it unmaps the old drive and maps the new drive but the name of the old drive stays the same even though it's mapped to the new location and I can browse it. The other problem is I only want to run <strong>checkOldDrive</strong> one time and just let <strong>checkDrive</strong> run. Any advice is appreciated.</p>

<pre><code>#!/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()
</code></pre>
