python脚本是否知道其存储的位置路径?

时间:2011-07-12 16:12:32

标签: python

/home/bar/foo/test.py:

我正在尝试test.py打印/home/bar/foo,无论我从何处运行脚本:

import os
def foo():
  print os.getcwd()

试运行:

[/home/bar $] python /home/bar/foo/test.py        # echoes /home/bar
[/tmp $] python /home/bar/foo/test.py             # echoes /tmp

os.getcwd()不是任务的功能。我怎么能这样做呢?

6 个答案:

答案 0 :(得分:7)

试试这个:

import os.path
p = os.path.abspath(__file__)

答案 1 :(得分:2)

__file__变量将包含单个Python文件的位置。

答案 2 :(得分:2)

如果脚本位于路径中的某个位置,那么是的,您可以从sys.argv中删除它

#!/usr/bin/env python                                                           
import sys
import os
print sys.argv
print os.path.split(sys.argv[0])

dan@somebox:~$ test.py
['/home/dan/bin/test.py']
('/home/dan/bin', 'test.py')

答案 3 :(得分:0)

正如其他人所说,您可以使用模块对象的__file__属性。

虽然,我想要注意的是,通常情况下,不是Python,你可以使用sys.argv[0]来达到同样的目的。通过argv[0]传递程序的完整绝对路径名是不同shell中的常见约定。

答案 4 :(得分:0)

将其放在一个文件中,然后运行它。

import inspect, os.path

def codepath(function):
  path = inspect.getfile(function)
  if os.path.isabs(path): return path
  else: return os.path.abspath(os.path.join(os.getcwd(), path))

print codepath(codepath)

我的测试显示,无论是否以绝对路径运行,都会打印Python脚本的绝对路径。从其他文件夹导入时,我也成功测试了它。唯一的要求是文件中存在函数或等效的可调用函数。

答案 5 :(得分:0)

import sys
print sys.path[0]

这将为您提供每次脚本的完整路径,而__file__将为您提供用于执行脚本的路径。 'sys.path'始终将脚本的路径作为第一个元素,这使得始终能够在同一目录中导入其他.py文件。