关闭更新文本时生成的PDF文件

2024-04-24 11:54:10 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有一个函数,它可以从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

Tags: 文件nameinpyselfclosepdfos
1条回答
网友
1楼 · 发布于 2024-04-24 11:54:10

the documentation

os.close(fd)

Close file descriptorfd.

Availability: Unix, Windows.

Note This function is intended for low-level I/O and must be appliedto a file descriptor as returned by os.open() or pipe(). To close a “file object” returned by the built-in function open() or by popen() or fdopen(), use its close() method.

你想把它应用到一个字符串上。你知道吗

您应该弄清楚如何在类中的方法之间传递文件描述符。在使用subprocess打开/关闭文件的情况下,这可能会稍微复杂一些,但通常需要(文件句柄/文件描述符/进程ID)来关闭文件。仅仅使用名称是不够的,因为例如,您可以打开同一个文件的两个句柄,它如何知道要关闭哪个句柄?你知道吗

相关问题 更多 >