Python 为什么tempfile似乎在with语句中删除自身?

Python 为什么tempfile似乎在with语句中删除自身?,python,filesystems,browser,temporary-files,Python,Filesystems,Browser,Temporary Files,此程序是一个浏览器,旨在规避代理设置。正如您所看到的,当处理数据时,它会被放入一个文件中,并在默认浏览器中打开。但是,当我在chrome中打开它时(我不知道这是否重要),它会说: 未找到此网页 找不到网址的网页:file:///C:/Users/Thornton/appdata/local/temp/tmpreb9zp.html 错误代码:找不到错误文件 代码如下: import urllib.request import webbrowser import tempfile from tkin

此程序是一个浏览器,旨在规避代理设置。正如您所看到的,当处理数据时,它会被放入一个文件中,并在默认浏览器中打开。但是,当我在chrome中打开它时(我不知道这是否重要),它会说:

未找到此网页

找不到网址的网页:
file:///C:/Users/Thornton/appdata/local/temp/tmpreb9zp.html

错误代码:找不到错误文件

代码如下:

import urllib.request
import webbrowser
import tempfile
from tkinter import *


class Browser:

    def __init__(self, master):
        global e1

        self.proxy_handler = urllib.request.ProxyHandler(proxies=None)
        self.opener = urllib.request.build_opener(self.proxy_handler)

        Label(master, text='Full Path').grid(row=0)
        e1 = Entry(master)
        e1.grid(row=0, column=1)
        Button(master, text='Go', command=self.browse).grid(row=0, column=2)
        root.bind('<Return>', self.browse)

    @staticmethod
    def parsed(data):
        initial = str(data)[2:-1]
        lines = initial.split('\\n')
        return lines

    def navigate(self, query):
        response = self.opener.open(query)
        html = self.parsed(response.read())
        return html

    def browse(self):
        raw_data = self.navigate(e1.get())
        clean_data = self.parsed(raw_data)

        with tempfile.NamedTemporaryFile(suffix='.html') as cache:
            cache.writelines(line.encode('UTF-8') for line in clean_data)
            webbrowser.open_new_tab(cache.name)

root = Tk()
root.wm_attributes('-topmost', 1)
app = Browser(root)
root.mainloop()
导入urllib.request
导入网络浏览器
导入临时文件
从tkinter进口*
类浏览器:
定义初始(自我,主):
全局e1
self.proxy\u handler=urllib.request.ProxyHandler(proxies=None)
self.opener=urllib.request.build\u opener(self.proxy\u处理程序)
标签(主,text='Full Path').grid(行=0)
e1=入口(主)
e1.网格(行=0,列=1)
按钮(master,text='Go',command=self.browse).grid(行=0,列=2)
root.bind(“”,self.browse)
@静力学方法
解析的def(数据):
初始值=str(数据)[2:-1]
行=初始值。拆分(“\\n”)
回程线
def导航(自我,查询):
response=self.opener.open(查询)
html=self.parsed(response.read())
返回html
def浏览(自我):
原始数据=self.navigate(e1.get())
clean_data=self.parsed(原始_数据)
使用tempfile.NamedTemporaryFile(后缀='.html')作为缓存:
cache.writelines(用于clean_数据中的行的行编码('UTF-8'))
webbrowser.open_new_选项卡(cache.name)
root=Tk()
root.wm_属性('-top',1)
app=浏览器(根)
root.mainloop()
因为tempfiles是,而
with
语句正好做到了这一点,webbrowser模块不会等待完成。从:

对于非Unix平台,或者当Unix上有远程浏览器时, 控制过程不会等待用户完成 浏览者


NamedTemporaryFile采用关键字参数
delete=False
。也许用这个?这些都在文档中。