2009-12-18 70 views
3

我正在编写一个跨平台的python脚本,如果平台是NT,需要知道是否以及在何处安装了Cygwin。现在,我只是使用一个天真的检查存在默认安装路径'C:\ Cygwin'。我希望能够以编程方式确定安装路径。在Python脚本中获取Cygwin安装路径

Windows注册表似乎不是一个选项,因为Cygwin不再将其挂载点存储在注册表中。因此,它甚至有可能以编程方式获取Cygwin安装路径?

回答

2

仅适用于Cygwin 1.7:

您需要检查Cygwin注册表项的HKEY_CURRENT_USER和HKEY_LOCAL_MAHINE。根据Cygwin的安装方式,它可能在两个关键之一。

以下是如何使用当前用户查询值的示例。

CYGWIN_KEY = "SOFTWARE\\Cygwin\\setup" 
hk_user = winreg.HKEY_CURRENT_USER 
key = winreg.OpenKey(hk_user, CYGWIN_KEY) 
root = winreg.QueryValueEx(key, "rootdir")[0] 

在编写脚本时,您应该首先检查全局HKEY_LOCAL_MACHINE。但是请记住,可以在一台机器上安装多个Cygwin。

1

这就是我要做的。有注册表项cygwin的驱动器安装点:

http://www.cygwin.com/ml/cygwin/2004-12/msg00200.html

您可以使用(在Python 3.0或WinReg项)模块_winreg看值了:

http://docs.python.org/library/_winreg.html

+1

cygwin 1.7不再使用注册表安装点。 – an0nym0usc0ward 2009-12-18 21:25:59

+0

是否有另一种方式获取Cygwin的安装路径,因为它不再在注册表中存储安装点? – csnullptr 2009-12-19 00:31:52

0

你可以使用HKEY_LOCAL_MACHINE\SOFTWARE\Cygwin\setup\rootdir值为Cygwin 1.7

+0

该密钥在我的机器上不存在。 – csnullptr 2010-04-02 22:24:03

+0

由于cygwin安装在我的系统上,key实际上在HKKEY_CURRENT_USER下。 – csnullptr 2010-04-13 05:41:22