我的问题是为什么我必须编写所有这些代码来获取文件名:
打印 os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
让我们一块一块来。
首先,print
比 PHP 的 . 长 1 个字符echo
。我怀疑你有这个问题。
接下来,您必须使用os.path.dirname
而不是仅仅dirname
因为 Python 允许将代码组织成模块,并允许您通过限定名称来引用事物。这就是为什么 Python 可以拥有类似gzip.open
和io.open
具有相同名称的函数。但是,如果您不想这样做,它不会强迫您使用限定名称;如果你已经完成了,比如说,from os.path import dirname
而不是import os
,你可以只使用dirname
.
接下来,您需要 ,abspath
因为您可能有一个相对路径。这实际上与 PHP 中的完全相同。只是您习惯于从始终通过绝对路径运行脚本的 Web 浏览器设置运行 PHP。如果你愿意,你可以在 Python 中做同样的事情。
最后:
有一些建议dirname(__file__)
应该在 python 中工作,但在通过命令行运行时它返回一个空字符串。
不对。
$ cat > test.py
print __file___
$ python test.py
test.py
如果“通过命令行运行”是指“使用交互式解释器”,当然没有__file__
,因为没有文件(终端标准输入除外)。
或者,如果您要打印dirname
类似 的相对路径test.py
,那当然总是一个空字符串,就像在 PHP 中一样。
把它们放在一起:
$ cat > test.py
from os.path import dirname
print dirname(__file__)
$ python $(abspath test.py)
/Users/abarnert/src/test
就像 PHP 一样。