我想知道python脚本的abspath,然后是下面的步骤。
但是当我执行它时,我得到了 2个结果。我发现结果基于脚本路径后跟py_compile。
这是我的脚本test.py:
import os
import inspect
print os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
使用py_compile构建它,当我输入 test.py 的不同路径时得到2个结果:
1.进入文件夹并使用脚本名称进行编译。然后执行chdir
[~]cd /usr/local/bin/
[/usr/local/bin/]python -m py_compile test.py
[/usr/local/bin/]cd ~
[~]python /usr/local/bin/test.pyc
/home/UserXX
2.在其他文件夹中,使用绝对脚本名称进行编译。
[~]python -m py_compile /usr/local/bin/test.py
[~]python /usr/local/bin/test.pyc
/usr/local/bin
怎么得到2个不同的结果?
答案 0 :(得分:1)
当我们想要获取一个python文件的路径时,通常我们可以使用以下任何方法:
<强> 1 强>
A)
import os
import inspect
print os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))).replace('\\', '/')
b)中
import os
import inspect
print os.path.dirname(os.path.abspath(inspect.stack()[0][1])).replace('\\', '/')
<强> 2 强>
A)
import os
import sys
print os.path.dirname(os.path.abspath(__file__)).replace('\\', '/')
b)中
import os
import sys
print os.path.dirname(os.path.abspath(sys.argv[0])).replace('\\', '/')
对于大多数情况,我们使用1
就足够了,我们很少使用像2
那样的检查,因为inspect
可能更慢。
我们什么时候使用2?比如使用inspect来获取文件路径?
我记得的一个方案是execfile
,当fileA.py
execfile fileB.py
在其程序中,fileA
&amp; fileB
不在同一个文件夹中。 (也许更多情况)
然后,如果我们在__file__
中使用fileB.py
,您会发现它的目录与fileA.py
相同,因为这里的目录将是调用者的目录。
然后我们必须使用inspect
来获取fileB.py
的目录。
无论如何,对于您的情况,如果您的test.py
位于调用图的顶部,建议您使用__file__
,则更快,无需使用inspect
。
有了这个,如果你使用-m py_compile
,它就适合你。
最后,为什么检查不能使用-m py_compile?
不幸的是,我没有找到正式文件来解释这一点。
但假设您的test.py
位于tt
文件夹中,那么让我们cd ..; python -m py_compile tt/test.py
,您将在test.pyc
文件夹中获得tt
。
打开这个pyc文件,虽然你会看到一些不适合男人阅读的东西,你仍然可以找到一些线索:
一行是这样的:
currentframe(^@^@^@^@(^@^@^@^@(^@^@^@^@s^G^@^@^@tt/a.pyt
您是否在pyc文件中看到文件夹名称tt?
如果您使用inspect.stack()
进行测试,则会更清楚,如果您使用print inspect.stack()[0][1]
,-m py_compile
将始终将您当前的编译文件夹保存在pyc文件中。
这直接意味着在py_compile
的过程中,某些内容被修复为pyc文件。我称之为fix
的内容使您可以在-m py_compile
所在的文件夹中运行您的程序。
希望这可以给你一些线索和帮助;帮助你。