2014-11-05 7 views
0

Python에서 regedit Key를 열어 String 값을 추가하려고합니다. 그러나 어떻게 든 OpenKey() 또는 ConnectRegistry 메소드를 인식하지 못합니다.NameError : name 'OpenKey'가 winreg를 사용하여 정의되지 않았습니다.

import winreg 
import sys 
#Create 2 keys with unique GUIDs as Names 

KeyName1 = "AppEvents\{Key1}" 
KeyName2 = "AppEvents\{Key2}" 
KeyName1_Path = "C:\Install\Monitor\Path.asmtx" 


winreg.CreateKey(winreg.HKEY_CURRENT_USER, KeyName1) 
winreg.CreateKey(winreg.HKEY_CURRENT_USER, KeyName2) 

#Add String as Path 
# aReg = ConnectRegistry(None,HKEY_CURRENT_USER) #NameError: name 'ConnectRegistry' is not defined 

keyVal=OpenKey(winreg.HKEY_CURRENT_USER,r"AppEvents\{Key2}", 0,KEY_WRITE) ameError: name 'OpenKey' is not defined 


SetValueEx(keyVal,"Path",0,REG_SZ, KeyName1_Path) 
+0

글쎄, winreg를 가져오고 있습니다. 왜 내가 winreg.OpenKey 할 필요가 보이지 않습니다 .OpenKey – jerryh91

답변

2

import winreg으로 가져 오기 했으므로 winreg.xxxxxx을 사용하여 해당 이름 공간 내의 모든 메소드를 참조해야합니다.

마찬가지로, winreg.OpenKeywinreg.ConnectRegistry을 사용해야합니다.

또는,

from winreg import CreateKey, OpenKey, ConnectRegistry, etc 

이것은 당신이 winreg 접두사의 필요없이 CreateKey 등을 사용할 수 있도록 할 할 수 있습니다.

+0

winreg 가져 오기 ... 시도했지만 컴파일러는 "이름 winreg 정의되지 않았습니다"라고 말합니다 – jerryh91

+0

오, Nevermind, 나는 이미 winreg에서 이러한 함수를 가져오고 있습니다. 그것은 내가 winreg를 사용하고있는 라인을 말하는 것입니다. – jerryh91

1

OpenKey 기능 winreg 모듈 내에 위치된다. 의미, 당신은 그것을 액세스하기 위해 winreg.와 접두사해야합니다

keyVal = winreg.OpenKey(winreg.HKEY_CURRENT_USER,r"AppEvents\{Key2}", 0,KEY_WRITE) 
#  ^^^^^^^ 

같은 일이 ConnectRegistry, SetValueEx에 간다, 그리고 다른 이름은 모듈에서 사용합니다. 당신은 docs에서이 문제에 대한 읽을 수 있습니다 : 당신이 볼 수 있듯이

If no other name is specified, and the module being imported is a top level module, the module’s name is bound in the local namespace as a reference to the imported module

는 모듈을 수입에만 사용할 수있는 모듈을 만든다. 모든 내용 (전역/함수/클래스/등)은 여전히 ​​모듈의 네임 스페이스 내에 유지됩니다.


또는, 당신은 당신이 직접 사용하려는 이름을 가져올 수 :

from winreg import CreateKey, OpenKey, SetValueEx 

을 그런 다음 winreg.로 접두사 할 필요가 없습니다. 하지만 몇 가지 이름 만 사용하는 경우이 작업을 수행하는 것이 좋습니다. 이와 같이 수십 개의 이름을 가져 오면 코드가 엉망이고 전역 네임 스페이스가 복잡해집니다.