1

我正在编写一个简单的 python 脚本,它连接到几台远程 Windows 机器,读取这些机器上远程文件夹的内容,然后压缩并复制在给定日期之后修改过的所有文件。

问题是它连接第一台电脑后,并没有连接第二台电脑,“net use”命令不起作用。如果我通过计算机的 Windows 命令行手动执行此操作,它确实有效,但不是通过我的 python 脚本。

我还没有找到任何可以帮助我的话题,我现在有点卡住了......你们知道我会做错什么吗?

下面是我的代码(如果它看起来不是很整洁,我很抱歉,我从 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
4

1 回答 1

0

实际上,如果我根本不为映射驱动器使用字母,则脚本正在工作:我使用命令'net use \\' + IP + '\c$ Password /user:Username'而不是'net use m: \\' + IP + '\c$ Password /user:Username'.

它有效,尽管我仍然无法解释为什么它不能使用相同的字母。

于 2015-07-30T09:28:30.500 回答