找到 pdf-reader 的路径并用它打开文件
Find path to pdf-reader and open file with it
OS : Linux.
我想做的事:用 TikZ 命令编译文件并用特定的 pdf 查看器打开它(我只需要使用查看器的名称!)。如果查看器不存在,我必须return一个异常。
我的方法:我搜索带有查看器名称的文件。这应该是观众本身。接下来,我想确定这个文件的路径。 tikz_commands。然后我想通过 subprocess.call([viewer_path] + ['tikz_commands.pdf']
使用它的值。以下是class的一部分:
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,我可以解决所有问题,现在一切正常。如果您想查看最终代码,请评论。
在类 UNIX 操作系统(如 Linux)上,通常 这样的程序安装在环境变量 PATH
。在这种情况下,您应该可以在没有任何位置的情况下调用程序 ,它应该可以正常工作。
您可以使用linux which
命令查找程序:
viewer = subprocess.check_output(["which", viewer_name])
如果找不到程序viewer_name
,它将引发CalledProcessError
,如果找到
,则会引发return完整路径
OS : Linux.
我想做的事:用 TikZ 命令编译文件并用特定的 pdf 查看器打开它(我只需要使用查看器的名称!)。如果查看器不存在,我必须return一个异常。
我的方法:我搜索带有查看器名称的文件。这应该是观众本身。接下来,我想确定这个文件的路径。 tikz_commands。然后我想通过 subprocess.call([viewer_path] + ['tikz_commands.pdf']
使用它的值。以下是class的一部分:
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,我可以解决所有问题,现在一切正常。如果您想查看最终代码,请评论。
在类 UNIX 操作系统(如 Linux)上,通常 这样的程序安装在环境变量 PATH
。在这种情况下,您应该可以在没有任何位置的情况下调用程序 ,它应该可以正常工作。
您可以使用linux which
命令查找程序:
viewer = subprocess.check_output(["which", viewer_name])
如果找不到程序viewer_name
,它将引发CalledProcessError
,如果找到