我想获取当前文件的目录路径.
我试过了:
>>> os.path.abspath(__file__)
'C:\\python27\\test.py'
Run Code Online (Sandbox Code Playgroud)
但是如何检索目录的路径?例如:
'C:\\python27\\'
Run Code Online (Sandbox Code Playgroud) 我有脚本调用其他脚本文件,但我需要获取当前在该进程中运行的文件的文件路径.
例如,假设我有三个文件.使用execfile:
script_1.py电话script_2.py.script_2.py打电话script_3.py.我怎样才能获得的文件名和路径script_3.py,从内部代码script_3.py,而无需从传递这些信息作为参数script_2.py?
(执行os.getcwd()返回原始起始脚本的文件路径而不是当前文件的.)
这似乎是一个新手问题,但事实并非如此.一些常见的方法并不适用于所有情况:
这意味着使用path = os.path.abspath(os.path.dirname(sys.argv[0])),但如果您从另一个目录中的另一个Python脚本运行,这不起作用,这可能发生在现实生活中.
这意味着使用path = os.path.abspath(os.path.dirname(__file__)),但我发现这不起作用:
py2exe没有__file__属性,但有一个解决方法execute()没有__file__属性NameError: global name '__file__' is not defined回答不完整的相关问题:
我正在寻找一个通用的解决方案,一个适用于所有上述用例的解决方案.
这是测试用例的结果:
a.py: __file__= a.py
a.py: os.getcwd()= C:\zzz
b.py: sys.argv[0]= a.py
b.py: __file__= a.py
b.py: os.getcwd()= C:\zzz
Run Code Online (Sandbox Code Playgroud)
#! /usr/bin/env python
import os, sys
print "a.py: sys.argv[0]=", sys.argv[0]
print "a.py: __file__=", __file__
print …Run Code Online (Sandbox Code Playgroud) 我有一个驻留在单个.py文件中的应用程序.我已经能够让pyInstaller成功地将它捆绑到一个EXE for Windows中.问题是,应用程序需要一个始终位于同一目录中的应用程序旁边的.cfg文件.
通常,我使用以下代码构建路径:
import os
config_name = 'myapp.cfg'
config_path = os.path.join(sys.path[0], config_name)
Run Code Online (Sandbox Code Playgroud)
但是,当从pyInstaller生成的EXE调用sys.path时,它似乎是空白的.当您运行python交互式命令行并尝试获取sys.path [0]时,会发生同样的行为.
有没有更具体的方法来获取当前运行的应用程序的路径,以便我可以找到相对于它的文件?
我在脚本中使用这段代码以跨平台的方式确定运行的确切位置:
SCRIPT_ROOT = os.path.dirname(os.path.realpath(__file__))
Run Code Online (Sandbox Code Playgroud)
很简单.然后我继续在SCRIPT_ROOT我的脚本的其他区域使用,以确保一切都是正确的相对.我通过py2exe运行时出现问题,因为生成的可执行文件未设置__file__,因此我的脚本中断.有谁知道如何解决或解决这个问题?
我的script.py在与脚本相同的目录中创建一个临时文件.
运行时:
python script.py
Run Code Online (Sandbox Code Playgroud)
它只是文件
但是当你运行时它不起作用:
python /path/to/script.py
Run Code Online (Sandbox Code Playgroud)
那是因为我在script.py中使用了临时文件的相对路径而不是绝对路径.问题是我不知道它将在哪条路上运行,所以我需要一种方法来知道这一点.
关于什么?
os.path.abspath(os.path.dirname(__file__))
Run Code Online (Sandbox Code Playgroud) 如果我有一个通过符号链接执行的python脚本,有没有办法可以找到脚本的路径而不是符号链接?我已尝试使用此问题中建议的方法,但它们始终返回符号链接的路径,而不是脚本.
例如,当它保存为我的"/usr/home/philboltt/scripts/test.py"时:
#!/usr/bin/python
import sys
print sys.argv[0]
print __file__
Run Code Online (Sandbox Code Playgroud)
然后我创建了这个符号链接
ln -s /usr/home/philboltt/scripts/test.py /usr/home/philboltt/test
Run Code Online (Sandbox Code Playgroud)
并使用执行脚本
/usr/home/philboltt/test
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:
/usr/home/philboltt/test
/usr/home/philboltt/test
Run Code Online (Sandbox Code Playgroud)
谢谢!菲尔