4
我在寻找一些关于逻辑的帮助,代码不是很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()
我刚刚意识到使用pairwise存在一个主要错误。这不是正确的功能,它只发生在我的环境中,因为我只映射了一个驱动器号。我会解决这个问题,并很快发布和编辑。 – 2010-02-11 15:56:05
感谢'getDriveMappings()'和'getUNCForDrive()'使用win32 api检索信息,这正是我一直在寻找的内容...... :-) – tim 2016-08-09 09:52:37