반응형
파이썬에서 __main__ 모듈의 파일 이름을 얻는 방법은 무엇입니까?
두 개의 모듈이 있다고 가정합니다.
a.py :
import b
print __name__, __file__
b.py :
print __name__, __file__
"a.py"파일을 실행합니다. 이것은 다음을 인쇄합니다.
b C:\path\to\code\b.py
__main__ C:\path\to\code\a.py
질문 : __main__
"b.py"라이브러리 내에서 모듈 (이 경우 "a.py") 경로를 어떻게 얻 습니까?
import __main__
print __main__.__file__
아마도 이것은 트릭을 할 것입니다.
import sys
from os import path
print path.abspath(sys.modules['__main__'].__file__)
안전을 위해 __main__
모듈에 __file__
속성 이 있는지 확인해야 합니다. 동적으로 생성되었거나 대화 형 Python 콘솔에서 실행중인 경우에는 다음이 없습니다 __file__
.
python
>>> import sys
>>> print sys.modules['__main__']
<module '__main__' (built-in)>
>>> print sys.modules['__main__'].__file__
AttributeError: 'module' object has no attribute '__file__'
간단한 hasattr () 확인은 앱에서 가능성이있는 경우 시나리오 2를 방지하는 트릭을 수행합니다.
아래의 Python 코드는 py2exe
실행 파일 과 원활하게 작동하는 것을 포함하여 추가 기능을 제공합니다 .
비슷한 코드를 사용하여 실행중인 스크립트와 관련된 경로를 찾습니다 __main__
. 추가 혜택으로 Windows를 포함한 크로스 플랫폼에서 작동합니다.
import imp
import os
import sys
def main_is_frozen():
return (hasattr(sys, "frozen") or # new py2exe
hasattr(sys, "importers") # old py2exe
or imp.is_frozen("__main__")) # tools/freeze
def get_main_dir():
if main_is_frozen():
# print 'Running from path', os.path.dirname(sys.executable)
return os.path.dirname(sys.executable)
return os.path.dirname(sys.argv[0])
# find path to where we are running
path_to_script=get_main_dir()
# OPTIONAL:
# add the sibling 'lib' dir to our module search path
lib_path = os.path.join(get_main_dir(), os.path.pardir, 'lib')
sys.path.insert(0, lib_path)
# OPTIONAL:
# use info to find relative data files in 'data' subdir
datafile1 = os.path.join(get_main_dir(), 'data', 'file1')
위의 예제 코드가 실행중인 스크립트의 경로를 결정하는 방법에 대한 추가 정보를 제공 할 수 있기를 바랍니다.
또 다른 방법은 sys.argv[0]
.
import os
import sys
main_file = os.path.realpath(sys.argv[0]) if sys.argv[0] else None
sys.argv[0]
Python이 시작 -c
되거나 Python 콘솔에서 확인 되면 빈 문자열이 됩니다.
import sys, os
def getExecPath():
try:
sFile = os.path.abspath(sys.modules['__main__'].__file__)
except:
sFile = sys.executable
return os.path.dirname(sFile)
이 함수는 Python 및 Cython 컴파일 된 프로그램에서 작동합니다.
참고 URL : https://stackoverflow.com/questions/606561/how-to-get-filename-of-the-main-module-in-python
반응형
'Program Tip' 카테고리의 다른 글
컴파일러가 분명히 초기화되지 않은 변수를 감지하지 못함 (0) | 2020.12.07 |
---|---|
MS-SQL Server에서 별칭이 지정된 열에 대해 GROUP BY를 수행하려면 어떻게합니까? (0) | 2020.12.07 |
jquery에서 양식 데이터를 객체로 얻는 방법 (0) | 2020.12.07 |
QTableWidget에서 열을 읽기 전용으로 만드는 방법은 무엇입니까? (0) | 2020.12.07 |
소켓이 C #에서 연결 / 연결 해제되었는지 확인하는 방법은 무엇입니까? (0) | 2020.12.07 |