查找python可执行文件的路径

查找python可执行文件的路径,python,path,exe,pyinstaller,Python,Path,Exe,Pyinstaller,我有一个脚本,它需要能够将自己的完整路径保存到一个变量中。 到目前为止,我已经尝试: sys.argv[0] os.path.realpath(__file__) os.path.abspath(__file__) 这些都与我的常规python脚本一起工作。但是,一旦我使用pyinstaller将其转换为可执行文件,上述方法就不再适用于获取.exe的路径。它们要么将.exe检测为.py,要么根本不检测它。为什么会这样?我可以使用什么方法来始终获取脚本的名称,无论是.py还是.exe。是否有一个

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

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

这些都与我的常规python脚本一起工作。但是,一旦我使用pyinstaller将其转换为可执行文件,上述方法就不再适用于获取.exe的路径。它们要么将.exe检测为.py,要么根本不检测它。为什么会这样?我可以使用什么方法来始终获取脚本的名称,无论是.py还是.exe。是否有一个函数可以获取文件的完整路径,无论是普通的.py文件还是python.exe文件。我使用的是Python2.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