나는 지금 다른 스크립트 파일이 파일의 파일 경로 스크립트에만 데릭쉐퍼드와 얻을 수 있지만 현재 실행 중인 프로세스 내의.
예를 들어, let& # 39, s say I 타원에는 세 개의 파일. Using [에스코필레] (http://docs.python.org/library/functions.html # 에스코필레):
어떻게 해야 할까요 '에서 코드 내에 파일 이름과 script_3.py , ' 길 '' 에서 '해당 정보를 전달하는 데 필요 없이 script_3.py 인수로 script_2.py'?
(실행 '로지제스우드 ()' 되돌려줍니다 원래의 시작, 현재 file& # 39 의 script& # 39 의 파일 경로 없습니다.)
__file__
다른 것으로 밝힌 바 있다. [로드패스자리 알파스] (사용할 수도 있습니다 https://docs.python.org/3/library/os.path.html # 로드패스자리 알파스) 를 통해 심볼릭:
import os
os.path.realpath(__file__)
요약하면 실험을 통해 파이썬 2 와 3. 함께
main.py - 런입니다 foo.py foo.py - 런입니다 lib/bar.py 파일 경로 표현식에서는 lib/bar.py 인쇄
<! - 언어: > 랑 없음 -;
| Python | Run statement | Filepath expression |
|--------+---------------------+----------------------------------------|
| 2 | execfile | os.path.abspath(inspect.stack()[0][1]) |
| 2 | from lib import bar | __file__ |
| 3 | exec | (wasn't able to obtain it) |
| 3 | import lib.bar | __file__ |
파이썬 패키지 제공을 위해 사용할 수 있도록 할 수도 있지만, 더 전환하십시오 2 '에서' - '빈' 두 개의 파일을 init.py 추가하기만 가져오기의 표시줄에는 lib 폴더에 있습니다.
자세한 내용은 https://stackoverflow.com/questions/27517003/difference-between-import-and-execfile
다음은 그 대답을 토대로 이 실험을 통해 스레드할 파이썬 2.7.10 - Windows 의.
print os.path.abspath(inspect.stack()[0][1]) # C:\filepaths\lib\bar.py
print os.path.dirname(os.path.abspath(inspect.stack()[0][1])) # C:\filepaths\lib
다음 세 가지 기준으로 실행 파일, 폴더 변경분이 'main.py' (main.py) 와 파이썬 (또한 절대 경로 및 지역 별도의 폴더에 있는 에스테휠스 했다).
C:\filepaths\main.py: (foo.py) '에스코필레 (& # 39, & # 39;)' C:\filepaths\foo.py: '' 에스코필레 (& # 39, lib/bar.py& # 39;) C:\filepaths\lib\bar.py:
import sys
import os
import inspect
print "Python " + sys.version
print
print __file__ # main.py
print sys.argv[0] # main.py
print inspect.stack()[0][1] # lib/bar.py
print sys.path[0] # C:\filepaths
print
print os.path.realpath(__file__) # C:\filepaths\main.py
print os.path.abspath(__file__) # C:\filepaths\main.py
print os.path.basename(__file__) # main.py
print os.path.basename(os.path.realpath(sys.argv[0])) # main.py
print
print sys.path[0] # C:\filepaths
print os.path.abspath(os.path.split(sys.argv[0])[0]) # C:\filepaths
print os.path.dirname(os.path.abspath(__file__)) # C:\filepaths
print os.path.dirname(os.path.realpath(sys.argv[0])) # C:\filepaths
print os.path.dirname(__file__) # (empty string)
print
print inspect.getfile(inspect.currentframe()) # lib/bar.py
print os.path.abspath(inspect.getfile(inspect.currentframe())) # C:\filepaths\lib\bar.py
print os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) # C:\filepaths\lib
print
print os.path.abspath(inspect.stack()[0][1]) # C:\filepaths\lib\bar.py
print os.path.dirname(os.path.abspath(inspect.stack()[0][1])) # C:\filepaths\lib
print
내 생각에 이것은 클리너:
import inspect
print inspect.stack()[0][1]
동일한 정보를 받고 있다.
print inspect.getfile(inspect.currentframe())
여기서 [0] 은 현재 프레임의 스택 (스택 상단형) 과 [1] 는 파일 이름, 거꾸로 가고 증가되지는 스택 (stack) 예:
print inspect.stack()[1][1]
파일 이름은 약간만이라도 스크립트입니다 현재 프레임 () 이라고 한다. 또한, [- 1] 에서 사용할 수 있는 원래 호출 스택을 스크립트입니다.
스크립트는 파일 하나만 있으면 참 최대한 선택함 제안을 모두 구성되어 있습니다.
스케쳐내 com/go/downloads_kr 아웃해야 실행 파일의 이름 (즉, 루트 파일 전달된 현재 파이썬 인터프리터 프로그램) 이 일을 할 수 있는 모듈로 파일에서 가져온 (let& # 39 의 solaris. 한은수의 라는 파일에 foo.py ):
'검사' 임포트합니다
'인쇄하십시오 제임스.스타크 ()' [- 1] [1]
마지막 한가지 때문에 (' [- 1]') 에 들어가 가장 먼저 심아이엔큐 스택할 it (스택 데이터 구조를 후입 선출 / 파일로 있다).
, Bar.py 파일을 선택한 다음 'if you' ll 인쇄하십시오 , bar.py # 39 foo 임포트합니다 it& 아닌 foo.py 될 수 있는, 이 모든 값은:
[0] '보통' 시스콜라리프 위치를 map_layer 스크립트입니다 의해 호출된 파이썬 인터프리터. Sys 문서용으로 에서 자세한 내용을 확인합니다.
[팀] (# 50521) 와 같은 @ @ [팻 노스] (# 50505) 가 지적대로 __file__ 속성에 액세스할 수 있습니다
>. 당시 있는 모듈에서는 파일 >. 로드되었는지 로드되었는지 경우 파일에서
I have a 스크립트입니다 indows 환경에 따라 일할 합니다. 이 코드는 것은 I& 있다 # 39, ve 함께 끝냈다.
import os,sys
PROJECT_PATH = os.path.abspath(os.path.split(sys.argv[0])[0])
'이' file 모두 사용할 수 있는 파일의 속성 뿐만 아니라 주 실행 코드를 임포트된 모듈에서는.
//Pyref.infogami.com/file> <. (https://web.archive.org/web/20090918095828/http) 참조.
() '' 제임스.스타크 사용할 수 있습니다.
import inspect,os
inspect.stack()[0] => (<frame object at 0x00AC2AC0>, 'g:\\Python\\Test\\_GetCurrentProgram.py', 15, '<module>', ['print inspect.stack()[0]\n'], 0)
os.path.abspath (inspect.stack()[0][1]) => 'g:\\Python\\Test\\_GetCurrentProgram.py'
이후 3 은 상당히 주류, 파이썬, as I believe '에는' 내가 하고 싶은 것은 아마도 지금 파트리브 오토메이티드 파일이므로 액세스하면 경로 정보를 더 좋은 도구입니다.
from pathlib import Path
current_file: Path = Path(__file__).resolve()
현재 파일, 이 경우 추가 하고 디렉터리이고 같이 간편한 자파렌트 () '' 패스 '' 을 발표했다.
current_path: Path = Path(__file__).parent.resolve()