使用" net use"循环中的命令

时间:2015-07-29 09:34:26

标签: python python-2.7 for-loop remote-access net-use

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

1 个答案:

答案 0 :(得分:0)

实际上,如果我根本没有使用映射驱动器的字母,那么脚本正在运行: 我使用命令'net use \\' + IP + '\c$ Password /user:Username'代替'net use m: \\' + IP + '\c$ Password /user:Username'

它有效,但我仍然无法解释为什么它不能使用同一个字母。