使用“净使用"循环命令 [英] Using the "net use" command in a loop
问题描述
我正在编写一个简单的 python 脚本,它连接到多台远程 Windows 机器,读取这些机器上远程文件夹的内容,然后压缩并复制在给定日期之后修改过的所有文件.
I am writing a simple python script that connects to several remote Windows machines, read the content of a remote folder on these machine, and then zip and copy all files that have been modified after a given date.
问题是连接第一台电脑后,连接不上第二台电脑,net use"命令不起作用.如果我通过计算机的 Windows 命令行手动执行此操作,它确实可以工作,但不能通过我的 python 脚本执行.
The problem is that after it connects to the first computer, it does not connect to the second computer, the "net use" command does not work. If I do it manually though the windows command line of my computer, it does work, but not through my python script.
我没有找到任何可以帮助我的主题,我现在有点卡住了...你们知道我可能做错了什么吗?
I have not found any topic that could help me, and I am kind of stuck now... Have you guys any idea of what I could do wrong ?
下面是我的代码(如果它看起来不太整洁,我很抱歉,我是从 python 开始的).
Below is my code (I apologize if it is not looking very neat, I am starting in python).
import os, subprocess, datetime, shutil
# the local destination of log files on my computer
ROOT_folder = 'C:\\Logs'
for i, IP in enumerate(list_of_IPs):
# list of names corresponding to the IPs
location = list_of_locs[i]
# create a local repository in my ROT folder for storing the logs of this remote station
try:
os.chdir(ROOT_folder + '\\' + location)
except:
os.mkdir(ROOT_folder + '\\' + location)
# The path to the logs that are stored on the remote windows machines
remote_path_to_logs = '_Temporary\\Logs'
print location
# Mapping a drive m: >>> Here I get the error at the 2nd iteration
subprocess.call(r'net use m: \\' + IP + '\c$ Password /user:Username', shell=True)
# The modification date of the most recent file I donwloaded is stored on my local computer in a txt file - here I read the date
try:
with open(ROOT_folder + '\\' + location + '\\last_mod.txt','r') as myFile:
last_file_downloaded = datetime.datetime.strptime(myFile.read(),'%Y-%m-%d %H:%M:%S')
except:
last_file_downloaded = datetime.datetime(1970,1,1)
os.chdir('M:\\' + remote_path_to_logs)
# I sort the list of files from oldest to newest
list_files = os.listdir('M:\\' + remote_path_to_logs)
list_sorted = sorted([(fl, os.path.getmtime(fl)) for fl in list_files],key=lambda x: x[1])
for log, logtime in list_sorted:
date_file = datetime.datetime(1970,1,1) + datetime.timedelta(seconds=logtime)
# I zip and move the file to my computer if it was modified after the date I stored on my computer
if date_file > last_file_downloaded :
print log + ': zipping and moving to local directory... '
with zipfile.ZipFile(date_file.strftime('%Y-%m-%d_%H-%M-%S') + '.zip','w', zipfile.ZIP_DEFLATED) as z:
z.write(log)
shutil.move(date_file.strftime('%Y-%m-%d_%H-%M-%S') + '.zip',ROOT_folder + '\\' + location)
# I overwrite the modification date in my file
with open(ROOT_folder + '\\' + location + '\\last_mod.txt','w') as myFile:
myFile.write(date_file.strftime('%Y-%m-%d %H:%M:%S'))
# Disconnecting the drive m:
subprocess.call('net use m: /delete /yes', shell=True)
# I tried to put a time.sleep(5) here but it does not help
推荐答案
实际上,如果我根本不为映射驱动器使用字母,则脚本正在运行:我使用命令 'net use \\' + IP + '\c$ Password/user:Username'
而不是 'net use m: \\' + IP + '\c$密码/user:Username'
.
Actually, if I don't use a letter at all for the mapped drive, the script is working:
I use the command 'net use \\' + IP + '\c$ Password /user:Username'
instead of 'net use m: \\' + IP + '\c$ Password /user:Username'
.
它有效,虽然我仍然无法解释为什么它不能使用相同的字母工作.
It works, althgough I still can't explain why it is not working using a same letter.
这篇关于使用“净使用"循环命令的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!