2010-07-07 78 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