我想看看在python中确定当前脚本目录的最佳方法是什么?
我发现,由于调用python代码的方法很多,很难找到一个好的解决方案.
这是一些问题:
__file__
如果脚本执行时未定义exec
,execfile
__module__
仅在模块中定义用例:
./myfile.py
python myfile.py
./somedir/myfile.py
python somedir/myfile.py
execfile('myfile.py')
(来自另一个脚本,可以位于另一个目录中,并且可以有另一个当前目录.我知道没有完美的解决方案,但我正在寻找解决大多数情况的最佳方法.
最常用的方法是os.path.dirname(os.path.abspath(__file__))
,如果你从另一个脚本执行脚本,这实际上不起作用exec()
.
任何使用当前目录的解决方案都将失败,根据调用脚本的方式或者可以在运行的脚本中更改它,可能会有所不同.
我在连接到本地unix服务器盒时运行一些可执行文件.
说,我正在尝试运行可执行文件'abc'.现在服务器可能为'abc'提供了别名.我如何知道这条路径?就像在,如果我调用'abc',它实际上可以从/ opt/corp/xyz/abc运行它.我怎样才能知道我在调用可执行文件的路径?
顺便说一句,我在HP-UX上运行:D
情况:我们知道下面将检查脚本是否已被直接调用.
if __name__ == '__main__':
print "Called directly"
else:
print "Imported by other python files"
Run Code Online (Sandbox Code Playgroud)
问题:该else
子句只是一个通用子句,只要脚本没有直接调用就会运行.
问题:如果没有直接调用,有没有办法获取导入的文件?
附加信息:下面是我想象代码的示例,只是我不知道要放什么<something>
.
if __name__ == '__main__':
print "Called directly"
elif <something> == "fileA.py":
print "Called from fileA.py"
elif <something> == "fileB.py":
print "Called from fileB.py"
else:
print "Called from other files"
Run Code Online (Sandbox Code Playgroud)