我正在用Python编写一个scritp,在windows终端中调用Ghostscript。
我需要获取在Windows中安装程序的路径(例如Ghostcript)
有任何环境变量或任何其他方法(系统注册表)来获取路径吗?
解决方案(来自@abarnert回答:)
import winreg
program_to_found = 'Software\\GPL Ghostscript'
try:
h_key = winreg.CreateKey(winreg.HKEY_LOCAL_MACHINE, program_to_found)
try:
gs_version = winreg.EnumKey(h_key, 0)
h_subkey = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, program_to_found+'\\'+gs_version)
gs_dll = (winreg.EnumValue(h_subkey,0))[1]
print("Ghostscript %s is installed in: %s" % (gs_version, gs_dll.replace('gsdll32.dll', '')))
except OSError:
print("Ghostscript insn't correctly installed!! ")
except PermissionError:
print("Ghostsript not found!! ")
适用于winXP和win7 32bit系统。
答案 0 :(得分:2)
你要求的是一般。 Windows找不到任意安装的程序。但它可能适用于任何特定的应用程序,包括Ghostscript。
由.msi机制安装的程序或与“添加/删除程序”中的“卸载”机制交互的其他程序,您可以找到该条目。但是具有自己的自定义安装程序和卸载程序的程序不必执行此操作。
添加“文件类型关联”的程序(例如,如果双击.ps
文件,Windows知道如何打开它)可以通过这些关联找到。
当然,许多程序都安装了自己的任意注册表项,您可以随时搜索这些注册表项。
如果你看一下Ghostscript installation docs,它会解释一下它的作用。我认为简短的版本是:
GS.EXE
所在的目录添加到%PATH%
- 但在您的情况下,很明显,它不存在。GS.EXE
的路径注册为至少.ps
个文件的文件类型关联,除非已经拥有其他内容。GSDLL32.DLL
的路径可以在GS_DLL
环境变量中找到,也可以在HKCU\Software\GPL Ghostscript\#.##
或HKLM\Software\GPL Ghostscript\#.##
中找到(其中#.##
是主要和次要的版本号)。当然,不能保证DLL和EXE位于同一位置(这就是为什么它首先完成所有复杂的东西)。GS.EXE
与卸载程序位于同一目录中。由于几乎所有这些都是可选的,因此需要花费多少精力来尝试所有不同的可能性。
要从Python访问这些注册表项,请参阅stdlib中的_winreg
模块。
答案 1 :(得分:0)
您可以通过以下方式获取GhostScript bin文件夹的路径:
from winreg import OpenKey, QueryValue, EnumKey, HKEY_LOCAL_MACHINE, KEY_READ
def get_ghostscript_path(): # function returns Ghostscript bin folder path
key = r'SOFTWARE\Artifex\GPL Ghostscript'
sub_key = OpenKey(HKEY_LOCAL_MACHINE, key, access=KEY_READ)
return QueryValue(HKEY_LOCAL_MACHINE, f'{key}\\{EnumKey(sub_key, 0)}') + r'\bin'