我目前正在使用Raspian OS和Libre Office。我正在使用Python 3。 我正在尝试创建一个RFID门锁,记录每个进入的用户。
我遇到的问题是,如果有人在查看日志后打开.csv文件,我的脚本就无法写入。所以它抛出一个错误。我希望我的脚本在打开该文件时关闭当前打开的实例(窗口),然后我可以打开脚本并写入该文件。
该文件与我的python脚本位于同一文件夹中。
我试过了:
os.system("TASKKILL /IM Entry_Log.csv")
没有运气。
这是我现在的功能。我需要在我的异常声明中关闭该文件。
def unlockDoor(x):
#Add GPIO Output here later
while True:
try:
userDictionary = shelve.open("User_Dictionary")
print('Welcome,', userDictionary[x])
print('Door Unlocked')
with open("Entry_Log.csv", "a") as log:
log.write("{0},{1},{2}\n".format(time.strftime("%Y-%m-%d %H:%M:S"), x, userDictionary[x]))
userDictionary.close()
except:
#close the open window for "Entry_Log.csv" here <--
答案 0 :(得分:0)
以下代码适用于Linux,使用psutil
包。当文件无法打开时,将进行搜索以查找打开文件的所有其他进程,并向这些进程发送终止信号。
注意,仅当调用进程具有正确的权限时才有效。
import psutil
import sys
import os
import signal
def terminate_others(pattern):
pids = psutil.pids();
for pid in pids:
p = psutil.Process(pid)
try:
flist = p.open_files()
if flist:
for f in flist:
if pattern in f.path:
print "Terminating " + repr(pid)
os.kill(pid, signal.SIGTERM)
except:
pass
fname = "Entry_Log.csv"
try:
with open(fname, "a") as log:
log.write("Some log text")
except:
print "error:", sys.exc_info()[0]
# close other processes that have this file open
terminate_others(fname)
希望这可能会有所帮助。