2010-07-07 81 views
3

腳本可以說我有在homedir/codes/py/run.py 一個Python腳本我也有在homedir/codes/run.sh 這個bash腳本運行run.py通過python py/run.py bash腳本。的Python:如何找到路徑運行python腳本

事情是,我需要能夠找到在run.py,調用腳本run.sh的路徑。如果run.sh從它自己的目錄運行,我可以使用os.getcwd()。但run.sh原則上可以從任何地方運行,然後os.getcwd()將返回到run.sh運行的路徑FROM,而不是run.sh的實際位置。

例如:

  • homedir/codes./run.sh - >os.getcwd()回報homedir/codes
  • homedir./codes/run.sh - >os.getcwd()回報homedir

但我想homedir/codes無論run.sh是如何被調用。這可能嗎?

+0

如果Python腳本從交互shell直接運行應該發生什麼,而不是從'運行.sh'? – 2010-07-07 07:59:03

+0

如果bash腳本只包含「python py/run.py」,它必須從'homedir/codes'運行,否則將不會找到'py/run.py'。所以你的問題不完整。 – Philipp 2010-07-07 07:59:04

+0

哦,對不起,我沒有想到這一點。我想我必須假設run.sh是從它自己的目錄運行的,否則run.py的相對路徑將不起作用(如你所說)。 – Eskil 2010-07-07 08:16:18

回答

3

要獲得在bash當前腳本的絕對路徑,這樣做:

SCRIPT=$(readlink -f "$0") 

現在,傳遞變量作爲最後一個參數的Python腳本。您可以從蟒蛇得到的說法是:

sys.argv[-1] 
+0

獲取正在運行的bash腳本的當前目錄的另一種方法(在反引號內使用dirname命令): SCRIPT ='dirname $ 0' – 2010-07-07 08:26:08

+0

這主要適用,但不適用,請參閱http://mywiki.wooledge.org/BashFAQ/028。像所有參數一樣,「$ 0」應該總是被引用。 – Philipp 2010-07-07 08:36:49

+0

如果您不想傳遞參數,應該也可以在shell包裝器中設置所需的目錄。 – 2010-07-07 08:37:26

3

你可以用絕對合格的路徑:

os.path.join(os.path.abspath(os.curdir)) 
+1

這不是OP想要的。 – fmark 2010-07-07 08:47:53

+1

這就是我在谷歌搜索:-) – 2012-02-25 17:48:16

+0

這與'pwd -P'相同這不是腳本的路徑。這是用戶的路徑。 – balki 2012-04-11 13:52:21