Python 为什么tempfile似乎在with语句中删除自身?
此程序是一个浏览器,旨在规避代理设置。正如您所看到的,当处理数据时,它会被放入一个文件中,并在默认浏览器中打开。但是,当我在chrome中打开它时(我不知道这是否重要),它会说: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
未找到此网页
找不到网址的网页:
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
。也许用这个?这些都在文档中。