/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()
不是任务的功能。我怎么能这样做呢?
答案 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文件。