在Perl中,FindBin
模塊用於查找原始腳本的目錄。在Python中獲取這個目錄的規範方法是什麼?什麼是Perl的FindBin的Python等價物?
一些我見過的選項:
os.path.dirname(os.path.realpath(sys.argv[0]))
os.path.abspath(os.path.dirname(sys.argv[0]))
os.path.abspath(os.path.dirname(__file__))
在Perl中,FindBin
模塊用於查找原始腳本的目錄。在Python中獲取這個目錄的規範方法是什麼?什麼是Perl的FindBin的Python等價物?
一些我見過的選項:
os.path.dirname(os.path.realpath(sys.argv[0]))
os.path.abspath(os.path.dirname(sys.argv[0]))
os.path.abspath(os.path.dirname(__file__))
我不使用Python很多時候,所以我不知道是否有包如FindBin但是
import os
import sys
bindir = os.path.abspath(os.path.dirname(sys.argv[0]))
應該工作。
我認爲在Perl中使用'FindBin'而不是$ 0就是找到腳本,即使它是通過鏈接訪問的。 sys.argv [0]幾乎與$ 0相同,並且不適用於鏈接。 – 2014-05-08 11:09:47
對不起,我錯了。兩者都不適用於鏈接。 – 2014-05-08 11:15:15
Perl FindBin和Dir :: Self _ _DIR_ _的一個主要用途是相對於腳本或模塊加載模塊。正如在「使用lib _ _DIR_ _」或「使用lib $ FindBin :: RealBin」一樣,據我所知,Python的接受答案不能以這種方式使用。 //接受的Python答案可以用來相對產生可執行文件。 – 2016-03-09 00:42:00
你可以試試這個:
import os
bindir = os.path.abspath(os.path.dirname(__file__))
這會給你當前文件的目錄的絕對路徑。
要更新以前的答案,與Python 3.4+,你現在可以做的:
import pathlib
bindir = pathlib.Path(__file__).resolve().parent
,這將給你相同的,除了你會得到一個路徑對象,方式更漂亮的工作用。
不要使用FindBin:http://www.perlmonks.org/?node_id=41213 – runrig 2010-03-30 14:59:35
perlmonks投訴是陳舊和過時的。 FindBin的創建是因爲在/ proc/PID/exe出現之前,需要啓發式來查找當前可執行文件的路徑。抱怨者有一種啓發式的方法,這種方法通常但並不總是奏效。據報道,最終,FindBin的啓發式算法得到了改進。現在,它在可用時使用/ proc/PID/exe,在這樣的系統上,它比perlmonks討論中的投訴更可靠。 – 2012-01-27 20:32:57
讓我添加我關於FindBin仍然有用的3年以上的舊評論 - 足夠有用,Perl FindBin現在位於核心perl發行版中:恕我直言比FindBin更有用的是CPAN的Dir :: Self,它創建了僞常量__DIR__,擴展到您的源文件所在的目錄(絕對)。 FindBin僅適用於可執行文件; __DIR__適用於任何模塊。 – 2016-03-08 23:44:20