2014-10-13 3 views
0

Windows 터미널에서 Ghostscript를 호출하는 Python으로 scritp를 작성하고 있습니다.Python에서 Windows에 설치된 프로그램의 경로를 얻는 방법

나는 프로그램 창 (예를 들어, Ghostcript)에 설치되어있는 경로를 얻을 필요가

모든 환경 변수 또는 경로를 얻을 수있는 다른 방법 (시스템 레지스트리가) 있습니다

?

솔루션 (@abarnert 응답 :이 winxp와와 WIN7 32 비트 시스템 작동

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!! ") 

에서.

+0

무엇이 필요합니까? Ghostscript의 경로가'% PATH %'에 있다면, 그냥 베어 메칭으로 실행할 수 있습니다. 그렇지 않은 경우 (즉, cmd 창에서 직접 사용할 수 없다면) Windows는 일반적으로 일반적으로 말할 수 없습니다. 하지만 ... Ghostscript가 예를 들어'.ps' 파일을 검색하면 레지스트리를 그렇게 검색 할 수 있습니다. 또는 항상 생성하는 알려진 레지스트리 항목이있는 경우 – abarnert

+0

Ghostscript는 Win의 % PATH %를 변경하지 않습니다. Ghostscript를 호출 할 때 전체 경로를 부름이라고해야하며 스크립트의 % PATH %를 변경하고 싶지 않습니다. – Trimax

+0

그렇다면 "설치된 프로그램의 경로를 가져 오는"일반적인 방법은 없습니다. 저의 이전 코멘트에 암시 된 바와 같이, 파일 형식 연결, .msi 설치 레코드 등에서 경로를 얻는 방법 또는 Ghostscript가 레지스트리에 저장하는 모든 사용자 지정 사항이 있습니다. 그러나 프로그램에 사용자 지정 .exe 설치 관리자가 있고 파일 형식 연결을 만들지 않고 레지스트리에 아무 것도 쓰지 않으면 찾아 볼 항목이 없습니다. – abarnert

답변

2

당신이 원하는 것은 불가능합니다 일반적으로입니다. Windows는 임의로 설치된 프로그램을 찾을 수 없습니다. 그러나 특정 app, Ghostscript 포함 가능합니다.

.msi 메커니즘 또는 프로그램 추가/제거에서 "제거"메커니즘과 상호 작용하는 다른 프로그램으로 설치 한 프로그램에 대한 항목을 찾을 수 있습니다. 그러나 자체 설치 프로그램과 제거 프로그램이있는 프로그램은이를 수행 할 필요가 없습니다.

"파일 유형 연결"을 추가하는 프로그램 (예 : Windows에서 파일을 열 수있는 .ps 파일을 두 번 클릭하면 해당 연결을 통해 찾을 수 있음).

물론 많은 프로그램이 자체의 임의의 레지스트리 키를 설치하므로 항상 해당 프로그램을 검색 할 수 있습니다.

Ghostscript installation docs을 보면, 그것이 무엇을하는지 조금 설명합니다. 나는 짧은 버전이라고 생각 :

  • GS.EXE%PATH%에 - 그러나 귀하의 경우에 앉아있는 디렉토리를 추가 할 수있는 옵션이 있습니다, 분명히, 그것은 없다.
  • .ps 개의 파일에 대해 GS.EXE의 파일 유형 연결로 경로를 등록하는 옵션이 있습니다 (다른 항목이 이미 소유되어 있지 않은 경우).
  • 의 경로는 GS_DLL 또는 HKCU\Software\GPL Ghostscript\#.## 또는 HKLM\Software\GPL Ghostscript\#.## (여기서 #.##은 주 버전 번호와 부 버전 번호입니다)에서 찾을 수 있습니다. 물론 DLL과 EXE가 같은 위치에 있다는 보장이 없습니다 (이것이 왜 처음부터 모든 복잡한 작업을 수행하는지 설명합니다).
  • 제거 프로그램의 경로는 Windows 제거 프로그램 메커니즘에 등록됩니다. 물론 GS.EXE이 제거 프로그램과 동일한 디렉토리에 있다는 보장은 없습니다.

거의 모든 것이 선택 사항이므로 모든 다른 가능성을 시도하기 위해 얼마나 많은 노력을 기울이지도 모릅니다.

파이썬에서 이러한 레지스트리 키에 액세스하려면 stdlib의 _winreg 모듈을 참조하십시오.

+0

그런 다음 어떻게하면 HKEY_LOCAL_MACHINE \ SOFTWARE \ GPL Ghostscript \ #. ## Python 스크립트의 값을 얻을 수 있습니까? – Trimax

+0

@Trimax : ['winreg'] (https://docs.python.org/2/library/_winreg.html) 모듈을 참조하십시오. 'CreateKey'에'GPL Ghostscript'를, 그리고 나서'EnumKey'에 올바른 버전 번호를 찾아야합니다. – abarnert

+1

Python 2에서 [_winreg'] (https://docs.python.org/2/library/_winreg.html#module-_winreg) 모듈 이름이 지정되었습니다. – martineau

관련 문제