2013-04-11 62 views
0

我覺得我正在服用瘋狂的藥丸。因此,爲了在工作中使用api上的安全性,我必須從註冊表中讀取2個東西,然後傳遞給suds。問題是讀取註冊表值。無論我做什麼,我都會得到「Error2系統找不到指定的文件」。我知道註冊表文件在那裏,但它不會讓我讀它。我已經在2個不同的2008 R2服務器上嘗試了下面的代碼。在一個Windows 7盒子上,我可以讀取值......但只能在一臺機器上讀取。下面是代碼,與實際目錄我需要改變(以保護匿名)閱讀與python問題的註冊表值

from _winreg import * 

key = OpenKey(HKEY_LOCAL_MACHINE, r"Software\a\b", 0, KEY_ALL_ACCESS) 
devguid = QueryValueEx(key, "DeviceID") 
devid = QueryValueEx(key, "DeviceGUID") 
devnm = socket.gethostname() 

如果我改變目錄\比A \ B以外的東西,它工作正常。我已驗證這些目錄的權限與我可以讀取的目錄完全相同。

另外,我可以從CMD運行下面的命令,並得到輸出我需要: REG查詢HKLM \ SOFTWARE \ A \ B/V DEVICEGUID 但是,當我從一個Python腳本運行它,它說找不到文件指定。

import os 
cmd = "reg query HKEY_LOCAL_MACHINE\software\a\b /v DeviceGUID" 
a = os.system(cmd) 
print a 

運行我的腳本作爲管理員或任何東西都沒有幫助。出於某種原因,python無法嘗試並準備註冊表....

+0

你的第二個不會工作,因爲你沒有逃脫'\\' – Serdalis 2013-04-11 00:48:22

回答

0

首先,您確實需要確保您的反斜槓適當地轉義,或者根據第一個代碼示例使用原始字符串。我會假設你已經做到了。

最可能的解釋是您在64位系統上使用32位Python。所以受限於註冊表重定向器提供註冊表的32位視圖。

要麼使用64位Python,要麼專門用64位視圖打開它們的鍵。通過指定KEY_WOW64_64KEY標誌來執行後者。