의도적으로 섀도 잉 된 모듈을 이 아닌이 sys.path
인 섀도우 잉 모듈로 가져 오는 것과 비슷한 질문이 있습니다. 꽤 쉽습니다. 단지 사용 , 내 모듈 이 sys.path
에서하고이 sys.path
최대 높은입니다, 의도적이다 :섀도 잉 모듈을 sys.path에있는 섀도 잉 모듈로 가져 오기
from __future__ import absolute_import
여기에 내 문제입니다!
더 구체적으로 말하자면, stdin
에 액세스 할 수없는 파이썬 인터프리터를 작성하고 있지만 Tkinter
을 사용할 수 있습니다. stdin
에 액세스 할 수 없다는 의미는 보통 input
, raw_input
및 getpass
을 사용할 수 없다는 것을 의미합니다. 나는 그들 자신의 방법으로 그들을 대체해야합니다. 처음 두 개는 다루기가 쉽습니다. 단지 __builtin__
으로 교체합니다. getpass
은 쉽지 않습니다. 사용자가 가져올 수도 있고 가져올 수도 없지만 실제로 가져올 수있는 것은 실제로 가져 오는 내용이 표준 모듈이 아니라 내 모듈인지 확인해야합니다. 따라서 모듈을 통해 입력을 얻을 수 있습니다. Tkinter
Entry
대신 stdin
입니다. 그 부분을 처리했습니다. 내가 이해할 수없는 부분은 다른 모든 것을 표준 getpass
에 전달하는 방법입니다. IE, getuser()
은 getpass
으로 처리해야합니다. 여기
from __future__ import absolute_import
import sys
pathToThisGetpass = sys.path.pop(1) # I know that the shadowing getpass is at index 1.
import getpass as realGetpass # Since the path doesn't contain this getpass, this should be the real one, right?
sys.path.insert(1, pathToThisGetpass) # Put this getpass module back into the path again
def getuser():
print("I am " + str(getuser))
print("I should call " + str(realGetpass.getuser))
return realGetpass.getuser()
내가 getuser()
실패 이유를 단지 내가 볼 수있는 두 인쇄 문에 추가하고, 나는이 인쇄 것을 발견
I am <function getuser at 0x026D8A30>
I should call <function getuser at 0x026D8A30>
플러스 나는 무한 재귀로 끝난다.
그래서 ... 어떤 생각을 어떻게 해결할 수 있습니까? 이 재생을 시도하는
는 다음 sys.path
에 들어있는 폴더를 추가, getpass.py
그것을 이름, 내가 위에서 가지고있는 것과 같은 파일을 작성하고 실행에 대한 답변으로 게시
import getpass
getpass.getuser()
['imp.load_module'] (https://docs.python.org/2/library/imp.html#imp.load_module)을 사용해 보셨나요? – 9000
@ 9000 - 나는 그렇지 않습니다. 그게 저에게 효과가 있습니까? 내가 링크 한 문서를 읽었을 때 약간 혼란스러워 보입니다. 답변으로 실제 사례를 들려 줄 수 있습니까? – ArtOfWarfare
@ 9000 - 즉, 내가 경로를 가면 그림자가있는'getpass '에 어떻게 접근 할 수 있는지 혼란 스럽다.'import ...'의'as '부분과 같은 것이 없다. .. '라고하면 다른 이름으로 언급 할 수 있습니다. – ArtOfWarfare