2015-06-19 38 views
0

我在一個mac上工作,我正在編寫一個python和pygame遊戲,需要一些聲音文件出現在源代碼所在的相同目錄中。當我通過python解釋器運行源代碼時,它是有效的。當我嘗試運行由cxFreeze編譯的可執行文件時,它不起作用。我已經在網上搜索解決方案,但什麼也沒找到。我如何獲得編譯的Python(與cxFreeze)獲取當前工作目錄作爲可執行文件所在的目錄?

當解釋python時,cwd就是源代碼所在的目錄。當使用cxFreeze編譯並通過終端運行時,cwd會變爲我的主目錄。由於我想讓這個遊戲變得可移植,並且我需要聲音文件與可執行文件位於同一個文件夾中,所以這會導致混亂。

import os 

# Load the sound files. 
CWDPATH = os.getcwd() 
BEEP1 = pygame.mixer.Sound(os.path.join(CWDPATH, 'beep1.wav')) 
BEEP2 = pygame.mixer.Sound(os.path.join(CWDPATH, 'beep2.wav')) 
BEEP3 = pygame.mixer.Sound(os.path.join(CWDPATH, 'beep3.wav')) 
BEEP4 = pygame.mixer.Sound(os.path.join(CWDPATH, 'beep4.wav')) 

這部分代碼是什麼導致了問題。它在解釋時運行平穩,但在用cxFreeze編譯時不起作用,因爲os.getcwd()計算爲主目錄。我已經嘗試在cxFreeze腳本的'packages'選項中放置'os'。它不起作用,我在這個時間裏工作沒有解決方案。我怎樣才能使這個工作?

+0

當您從終端運行它,你首先導航到合適的文件夾,然後運行該文件,或者你輸入一個更完整路徑('cd myprograms','myprogram.exe'或'myprograms/myprogram.exe')?如果您只是想將聲音文件指向同一個文件夾,則無需指定路徑;只需使用'pygame.mixer.Sound('beep1.wav')'。 – TigerhawkT3

回答

1

你試試可以使用sys.argv。命令行參數的第一個元素總是程序本身:

import os 
import sys 

CWDPATH = os.path.abspath(os.path.dirname(sys.argv[0])) 
+0

非常感謝這爲我工作! –

0

使用

os.path.abspath(__file__) 

將返回正在執行的腳本的絕對路徑,因爲你必須在同一路徑的音頻文件,它不應該是一個問題訪問這些