所以我有一个函数,它可以从Tkinter中的latex文件生成一个pdf文件——但只有在单击按钮时。 我现在要做的是编写一个函数,每隔几秒钟更新一次pdf文件,这样用户就可以看到他们迄今为止写的东西是什么样子。我所做的是运行函数,生成pdf每隔几秒钟和另一个函数,这是应该关闭文件后几秒钟-但我似乎有一个问题关闭pdf文件-因此我需要手动执行,否则更新版本的pdf不会出现在屏幕上。 以下是我使用的代码:
def generate_pdf(self):
global mainName
global pdfDirectory
name=self.getName(self.fl)
f = open('%s.tex'%name,'w')
tex = self.txt.get(1.0,"end-1c")
f.write(tex)
f.close()
proc=subprocess.Popen(['pdflatex','-output-directory', pdfDirectory,'%s.tex'%name])
proc.communicate()
self.open_file(name)
self.master.after(20000,self.generate_pdf)
self.close_file(name)
def open_file(self,filename):
if sys.platform == "win32":
os.startfile('%s.pdf'%filename)
#os.unlink('%s.tex'%filename)
os.unlink('%s.log'%filename)
os.unlink('%s.aux'%filename)
else:
opener ="open" if sys.platform == "darwin" else "xdg-open"
subprocess.call([opener, '%s.pdf'%filename])
def close_file(self,filename):
if sys.platform == "win32":
os.close('%s.pdf'%filename)
else:
closer ="close" if sys.platform == "darwin" else "xdg-close"
subprocess.call([closer, '%s.pdf'%filename])
self.master.after(29000,self.close_file)
在Windows中运行时出现的错误是:
os.close('%s.pdf'%filename)
TypeError: an integer is required
在Linux中运行时出现的错误是:
File "interface_updated_Linux.py", line 716, in generate_pdf
self.close_file(name)
File "interface_updated_Linux.py", line 734, in close_file
subprocess.call([closer, '%s.pdf'%filename])
File "/usr/lib64/python2.6/subprocess.py", line 478, in call
p = Popen(*popenargs, **kwargs)
File "/usr/lib64/python2.6/subprocess.py", line 642, in __init__
errread, errwrite)
File "/usr/lib64/python2.6/subprocess.py", line 1238, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
从the documentation:
你想把它应用到一个字符串上。你知道吗
您应该弄清楚如何在类中的方法之间传递文件描述符。在使用
subprocess
打开/关闭文件的情况下,这可能会稍微复杂一些,但通常需要(文件句柄/文件描述符/进程ID)来关闭文件。仅仅使用名称是不够的,因为例如,您可以打开同一个文件的两个句柄,它如何知道要关闭哪个句柄?你知道吗相关问题 更多 >
编程相关推荐