2017-10-10 8 views
1

변수에 자체 경로 전체를 저장할 수 있어야하는 스크립트가 있습니다. 은 지금까지 나는 시도했다 : 내가 가지고있는 일반 파이썬 스크립트python 실행 파일의 경로 찾기

sys.argv[0] 
os.path.realpath(__file__) 
os.path.abspath(__file__) 

이러한 모든 작업. 그러나 pyinstaller를 사용하여 실행 파일로 변환하면 위의 방법이 더 이상 .exe 경로를 가져올 수 없습니다. 그들은 .exe를 .py로 탐지하거나 전혀 탐지하지 않습니다. 왜 이렇게하고 어떤 방법을 사용할 수 있습니다. 그것은 .py 또는 .exe이든 항상 스크립트의 이름을 가져옵니다. 일반 .py 파일이든 파이썬 .exe 파일이든 관계없이 파일의 전체 경로를 가져올 수있는 함수가 있습니까? 파이썬 2.7에 윈도우즈를 사용 중입니다.

답변

0

는 .EXE를 평하고 .EXE 프로그램을 .SCR로 변경되는 경우에도 여전히 작동 :

import sys 
import os 
print os.path.abspath(sys.argv[0]) 

명령 줄 출력 :

C:\Users\angus\Desktop>t.py 
C:\Users\angus\Desktop\t.py 

C:\Users\angus\Desktop\dist\t>t.exe 
C:\Users\angus\Desktop\dist\t\t.exe 

C:\Users\angus\Desktop\dist\t>t.scr 
C:\Users\angus\Desktop\dist\t\t.scr 
1

이것은 트릭을 할 수 있지만, 더 나은 해결책을 찾지 못하면 이것을 버리지 마십시오. 이 Py를 3.4에서 작동

import subprocess 

path = subprocess.Popen('cd') 
1

/승리 (10)

from win32api import GetCommandLine, GetFullPathName 

print (GetCommandLine()) 

print (GetFullPathName('temp.exe')) 

출력 : 스크립트의 파일을 분리하는 추가 단계를 수행해야 할 수도 있기 때문에 명령 행을 표시

Microsoft Windows [Version 10.0.15063] 
(c) 2017 Microsoft Corporation. All rights reserved. 

C:\scratch\dist\temp>temp 
temp 
C:\scratch\dist\temp\temp.exe 

C:\scratch\dist\temp> 

GetFullPathName에서 사용할 이름입니다.

편집 : 수정했습니다! 스크립트의 이름 (temp.py)을 알고 있기 때문에 pyinstaller가 실행 파일 (temp.exe)에 할당 할 이름을 알았고 GetFullPathName을 사용할 수있었습니다. 이 모든 파일 확장자 작동