查找 python 可执行文件的路径

Find path of a python executable

我有一个脚本需要能够将它自己的完整路径保存到一个变量中。 到目前为止我已经尝试过:

sys.argv[0]
os.path.realpath(__file__)
os.path.abspath(__file__)

这些都适用于我拥有的常规 python 脚本。但是,一旦我使用 pyinstaller 将其转换为可执行文件,上述方法就不再适用于获取 .exe 的路径。他们要么将 .exe 检测为 .py,要么根本不检测它。为什么会这样,我可以使用什么方法始终获取脚本的名称,无论它是 .py 还是 .exe。是否有一个函数可以获取文件的完整路径,无论它是普通的.py 文件还是python .exe 文件。我在 python 2.7 使用 windows 10

这可能会奏效,但如果您找到更好的解决方案,请毫不犹豫地放弃它。

import subprocess

path = subprocess.Popen('cd')

这适用于 Py 3.4/Win 10。

from win32api import GetCommandLine, GetFullPathName

print (GetCommandLine())

print (GetFullPathName('temp.exe'))

输出:

Microsoft Windows [Version 10.0.15063]
(c) 2017 Microsoft Corporation. All rights reserved.

C:\scratch\dist\temp>temp
temp
C:\scratch\dist\temp\temp.exe

C:\scratch\dist\temp>

我显示了命令行,因为您可能需要执行额外的步骤来隔离脚本的文件名以便在 GetFullPathName 中使用。

编辑:我更正了!因为我知道脚本的名称 (temp.py),所以我知道 pyinstaller 将分配给可执行文件的名称 (temp.exe),并且我可以使用 GetFullPathName 来对付它。

这适用于所有文件扩展名 .py、.exe,即使 .exe 更改为 .scr 程序仍然有效:

import sys
import os
print os.path.abspath(sys.argv[0])

命令行输出:

C:\Users\angus\Desktop>t.py
C:\Users\angus\Desktop\t.py

C:\Users\angus\Desktop\dist\t>t.exe
C:\Users\angus\Desktop\dist\t\t.exe

C:\Users\angus\Desktop\dist\t>t.scr
C:\Users\angus\Desktop\dist\t\t.scr