查找pdf-reader的路径并使用它打开文件

时间:2017-07-08 20:34:46

标签: python pdf-viewer

操作系统:Linux。

我想做什么:使用TikZ命令编译文件并使用某个pdf-viewer打开它(我必须只使用查看器的名称!)。如果查看器不存在,我必须返回异常。

我的方法:我搜索一个带有查看器名称的文件。这应该是观众本身。接下来,我想确定此文件的路径。 tikz_commands。然后我想通过subprocess.call([viewer_path] + ['tikz_commands.pdf']使用它的值。以下是课程的一部分:

import subprocess
import os 
import tempfile
import fnmatch

def visualize(self,viewername):

    temp = tempfile.mkdtemp()
    os.chdir(temp)

    file = open('tikz_commands.tex', 'w')
    file.write(tikz_commands)
    file.close()

    proc=subprocess.Popen(['pdflatex','tikz_commands.tex'])
    proc.communicate()

    subprocess.call([str(self.set_viewer(viewername)), 'tikz_commands.pdf'])

 def set_viewer(self,viewername):
    try:
        for root, dirs, files in os.walk(os.path.join('path', 'to', 'file')):
            for file in files:
                if str(viewername) in file.lower():
                    return(os.path.join(root, file))
    except NameError:
        print('No such viewer')

这可以吗?

我忽略了一种更简单的方法吗?

非常感谢任何帮助!

编辑:感谢@Roland Smith和@Robb,我可以解决所有问题,现在它完美无缺。如果您想查看最终代码,请注释。

2 个答案:

答案 0 :(得分:0)

在类UNIX操作系统(如Linux)上,通常需要 这样的程序安装在环境变量PATH中包含的位置。在这种情况下,您应该能够在没有任何位置的情况下调用程序,它应该可以正常工作。

答案 1 :(得分:0)

您可以使用linux which命令查找程序:

viewer = subprocess.check_output(["which", viewer_name])

如果找不到程序CalledProcessError,则会引发viewer_name并返回完整路径