【问题标题】:Find path to pdf-reader and open file with it找到pdf阅读器的路径并用它打开文件
【发布时间】:2017-07-08 20:34:46
【问题描述】:

操作系统:Linux。

我想要做什么:用 TikZ-commands 编译一个文件,然后用某个 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,我可以解决所有问题,现在可以完美运行。如果您想查看最终代码,请发表评论。

【问题讨论】:

    标签: python pdf-viewer


    【解决方案1】:

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

    【讨论】:

    • subprocess.call(['viewer_name_file', 'tikz_commands.pdf']) 可以吗?
    • open 不是参数。程序名称为dxg-open
    • 我可以这样使用'xdg'还是总是需要参数xdg-open?编辑:@Roland Smith 回答
    • 谢谢这很好用。但是为什么例如xdg-openxpdf 作为程序(我在那里使用)没有像.exe 这样的结尾?
    • 在Linux等类UNIX系统上,文件是否可执行由文件的mode(或permissions)决定,而不是扩展名。见chmod(1)
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-04
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 2014-01-10
      相关资源
      最近更新 更多