2015-10-26 54 views
2

所以我想爲我的一個python程序做一個可執行文件。我需要訪問我的可執行文件所在文件夾中的文件。由於此文件可能會移動,因此我正在使用import os; current_dir = os.getcwd()Python os.list_dir停止一級短

當我通過終端運行程序python filename.py和I print current_dir時,我得到/Users/User/Desktop/Executable/

當我通過Finder(我在OS X上)通過終端打開.py運行可執行文件並打印current_dir時,我得到/Users/User。注意,這沒有我需要的其他2個級別,即Desktop/Executable。爲何會發生這種情況?

備註:這只是一個一次性的,快速的可執行文件,並不意味着要長時間使用,但是必要的,所以使.py可執行文件符合我們的目的。這由chmod +x filename.py完成。

答案,可以按照選定的回答這個問題的意見中找到的是:

import os 
import sys 
if hasattr(sys, 'frozen'): 
    basis = sys.executable 
else: 
    basis = os.path.dirname(sys.argv[0]) 
+0

因爲您的工作目錄不同,請將完整路徑傳遞到目錄 –

+0

https://github.com/glue-viz/glue-bot/問題/ 2這個問題可能會有所幫助...... – Busturdust

回答

1

這應該得到適當的文件,它會返回可執行文件的路徑或腳本的路徑。

if hasattr(sys, 'frozen'): 
    basis = sys.executable 
else: 
    basis = sys.argv[0] 

如果您嘗試chaning的要不然這不工作:部分

os.path.dirname(os.path.realpath("__file__"))

編輯:明明:import sys

可執行文件會增加一個冰凍屬性,檢查之前,該屬性檢查工作目錄。凍結的應用程序可能會運行python.exe,它將以不同的方式解析您的工作目錄

+0

即使有了這個,並且改變'else',我仍然會得到相同的行爲。嗯。我會繼續玩這個。謝謝。我會說終端打開帶有終端的.py命令時是'/Users/User/Desktop/Executable/filename.py;退出;'。我不知道這是否有用。 –

+0

這是python文件實際存在的地方嗎?比不正確? – Busturdust

+0

.py文件存在'/ Users/User/Desktop/Executable/filename.py'。 –

0

當前工作目錄並不一定是該文件實際上位於同一目錄中。要獲得實際的文件的路徑,你可以使用:

os.path.dirname(os.path.realpath("__file__")) 
0

爲os.getcwd的文檔()說:返回代表當前工作目錄的字符串。當前工作目錄可能不是python腳本所在的位置。 你應該檢查一個函數的文檔,它會給你腳本的目錄,而不是工作目錄,這可能是不同的。