2017-10-10 10 views
1

私は自身のフルパスを変数に保存する必要があるスクリプトを持っています。 は、これまで私が試してみました:私は、通常のPythonスクリプトでpython実行可能ファイルのパスを見つける

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

これらすべての作業。しかし、pyinstallerで実行可能ファイルに変換すると、上記の方法は.exeのパスを取得するためには機能しなくなりました。それらは.exeを.pyとして検出するか、まったく検出しません。これはなぜですか、どのような方法を使用すれば、スクリプトの名前が.pyでも.exeでもいつでも得られます。通常の.pyファイルでも、python .exeファイルでも、ファイルの完全なパスを取得できる関数はありますか?私はPython 2.7上にWindowsを使用しています。

答えて

0

は、.exeファイルをの.pyと.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

これはトリックを行うかもしれませんが、より良い解決策を見つけたら、これを落とさないでください。これは、Pyの3.4上で動作します

import subprocess 

path = subprocess.Popen('cd') 
1

/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を使用することができました。これは、すべてのファイル拡張子のために働く

関連する問題