使用“净使用"循环命令 [英] Using the "net use" command in a loop

查看:83
本文介绍了使用“净使用"循环命令的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在编写一个简单的 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆