我的代码基本上创建了一个.bat
文件,在其中写入了一些文本,然后使用Popen
运行它。但是我得到这个错误:
PermissionError:[WinError 32]该进程无法访问文件,因为该文件正在被另一个进程使用
这就是我所拥有的:
def killProcesses(self):
processlist = open("processes.txt")
with open("kill.bat", "w") as batfile:
batfile.write("""echo off
cls
""")
batfile.close()
for line in processlist:
newbatfile = open("kill.bat","a")
newdata = line.replace('\n','')
newbatfile.write("""
Taskkill /IM """+newdata+""" /F""")
p = Popen("kill.bat")
stdout,stderr = p.communicate()
processlist.close()
我做了一些研究,发现在我的代码中添加with
或close()
可能会解决问题,但是它什么也没做,我仍然遇到错误。难道我做错了什么?我的猜测是我没有指定确切的文件路径,但是该文件与python脚本位于同一目录中,因此我感觉好像不需要指定确切的路径。任何帮助将不胜感激。
答案 0 :(得分:1)
您不需要最初的batfile.close()调用:with块可确保退出该块时关闭文件。但是,以后的循环在每次循环时都会打开文件的新句柄,并且永远不会关闭它们。您可以考虑将循环重写为:
with open("kill.bat", "a") as newbatfile:
for line in processlist:
newdata = line.replace("\n", "")
newbatfile.write(...)
或更妙的是,只需将循环放在带有block的原始文件中即可。