2017-10-10 107 views
1

我有一个脚本,需要能够将自己的完整路径保存到变量中。 到目前为止,我曾尝试:查找python可执行文件的路径

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

回答

0

这适用于所有文件扩展名的.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 
1

这可能会诀窍,但如果你找到一个更好的解决方案不要放弃这一点。

import subprocess 

path = subprocess.Popen('cd') 
1

这部作品PY 3.4 /赢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来对付它。

相关问题