亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何正確確定當前腳本目錄?

如何正確確定當前腳本目錄?

Smart貓小萌 2019-06-25 17:21:04
如何正確確定當前腳本目錄?我想看看在python中確定當前腳本目錄的最佳方法是什么?我發現,由于調用python代碼的方法很多,很難找到一個好的解決方案。以下是一些問題:__file__如果腳本是用exec, execfile__module__僅在模塊中定義。用例:./myfile.pypython myfile.py./somedir/myfile.pypython somedir/myfile.pyexecfile('myfile.py')(來自另一個腳本,該腳本可以位于另一個目錄中,并且可以具有另一個當前目錄)。我知道沒有完美的解決方案,但我正在尋找解決大多數情況的最佳方法。最常用的方法是os.path.dirname(os.path.abspath(__file__))但是,如果您從另一個exec().警告任何使用當前目錄的解決方案都將失敗,這可能根據腳本的調用方式而有所不同,或者在運行的腳本中進行更改。
查看完整描述

3 回答

?
慕萊塢森

TA貢獻1810條經驗 獲得超4個贊

os.path.dirname(os.path.abspath(__file__))

確實是你能得到的最好的。

使用exec/execfile通常,您應該使用模塊基礎結構來加載腳本。如果必須使用這些方法,我建議設置__file__globals您將傳遞給腳本,以便它能夠讀取該文件名。

在執行代碼中沒有獲得文件名的其他方法:正如您注意到的,CWD可能位于一個完全不同的位置


查看完整回答
反對 回復 2019-06-25
?
翻閱古今

TA貢獻1780條經驗 獲得超5個贊

如果您真的想討論腳本被調用的情況,請通過execfile(...),您可以使用inspect模塊來推導文件名(包括路徑)。據我所知,這將適用于你列出的所有案件:

filename = inspect.getframeinfo(inspect.currentframe()).filename
path = os.path.dirname(os.path.abspath(filename))


查看完整回答
反對 回復 2019-06-25
?
慕沐林林

TA貢獻2016條經驗 獲得超9個贊

#!/usr/bin/env pythonimport inspectimport osimport sysdef get_script_dir(follow_symlinks=True):
    if getattr(sys, 'frozen', False): # py2exe, PyInstaller, cx_Freeze
        path = os.path.abspath(sys.executable)
    else:
        path = inspect.getabsfile(get_script_dir)
    if follow_symlinks:
        path = os.path.realpath(path)
    return os.path.dirname(path)print(get_script_dir())

它在CPython、Jython、PyPy上工作。如果腳本使用execfile() (sys.argv[0]__file__-基于基礎的解決辦法在此將失敗)。如果腳本在里面,它就能工作。一個可執行的壓縮文件(/一個雞蛋)..如果腳本是“導入”的,它就能工作(PYTHONPATH=/path/to/library.zip python -mscript_to_run)從zip文件中返回存檔路徑(在本例中是這樣的)。如果腳本被編譯成獨立的可執行文件(sys.frozen)。它適用于符號鏈接(realpath消除符號鏈接)。它在交互式解釋器中工作;在本例中,它返回當前的工作目錄。


查看完整回答
反對 回復 2019-06-25
  • 3 回答
  • 0 關注
  • 721 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號