2015-06-19 41 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__) 

将返回正在执行的脚本的绝对路径,因为你必须在同一路径的音频文件,它不应该是一个问题访问这些