1. Vim自动保存设置

首先,设置Vim自动保存。在.vimrc文件(本例中,是在/opt/vim_runtime/vim my_configs.vim文件中添加)添加如下内容:

autocmd TextChanged,TextChangedI *
    \ if &buftype ==# '' || &buftype == 'acwrite' |
    \     silent write |
    \ endif

2. 记录文件变化

每隔1秒钟记录所有用户的文件,核心代码如下:

def record_file_changes(out_file, d_user_name_info,  detect_formatted_filenames, start_dt, end_dt):
    global nr_loop
    global d_username_filesize

    dt_now = datetime.datetime.now()
    if dt_now > end_dt:
        return

    # record files every second
    #class threading.Timer(interval, function, args=None, kwargs=None)
    threading.Timer(1.0, record_file_changes, args=[out_file, d_user_name_info,  detect_formatted_filenames, start_dt, end_dt]).start()

    with open(out_file, 'a+') as f:
        writer = csv.writer(f)
        for username in d_user_name_info:

            for detect_formatted_filename in detect_formatted_filenames:
                detect_filename = detect_formatted_filename.format(username=username)

                filename = os.path.basename(detect_filename)
                try:
                    file_size = os.path.getsize(detect_filename)
                except Exception as e:
                    print(username, str(e))
                    continue

                dt = datetime.datetime.now()
                str_dt = dt.strftime('%Y-%m-%d %H:%M:%S')

                student_id = d_user_name_info[username].split('-')[1]
                l = [str_dt, student_id, filename, file_size]

                # writer to file if file size changed
                if d_username_filesize[username] != file_size or nr_loop==0:
                    writer.writerow(l)
                    d_username_filesize[username] = file_size

        nr_loop += 1

完整的源代码见record_file_changes.py

本文系Spark & Shine原创,转载需注明出处本文最近一次修改时间 2022-06-05 10:59

results matching ""

    No results matching ""