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。