簡體   English   中英

__file__和os.path模塊不能很好地播放嗎?

[英]__file__ and os.path module not playing nicely?

import os
print __file__
print os.path.dirname(__file__)
os.chdir('/tmp')
print __file__  # unchanged, of course
print os.path.dirname(__file__)  # now broken

我上面有這個問題,在模塊加載程序設置__file__之后,在腳本中使用了os.chdir之后,就不再依賴dirname(__file__)

解決此問題的常用機制是什么,假設您可能不知道以前在哪里/何時/如何調用過os.chdir

編輯:我希望第二個例子可以更好地闡明我的問題

import os
old_dir = os.getcwd()
print os.path.abspath(__file__)
os.chdir('/tmp')
print os.path.abspath(__file__)
os.chdir(old_dir)

輸出是這樣的:

wim@wim-acer:~$ python --version
Python 2.7.1+
wim@wim-acer:~$ pwd
/home/wim
wim@wim-acer:~$ python /home/wim/spam.py
/home/wim/spam.py
/home/wim/spam.py
wim@wim-acer:~$ python ./spam.py
/home/wim/spam.py
/tmp/spam.py

__file__必須存在於sys.path

for dirname in sys.path:
   if os.path.exists( os.path.join(dirname,__file__) ):
       # The directory name for `__file__` was dirname

最后一個示例在__file__名稱( ./xxx.py )中具有相對路徑元素。 調用abspath時,它將被擴展到當前目錄。

如果將此代碼放在模塊中,則不會有此問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM