2016-11-27 15 views
0

我有一个简单的应用程序,我使用wxpython和libvlc播放mp3文件。文件列表是一个文本文件,其中包含每个mp3文件标题和相应的文件名。简单的'循环'读取每一行...MAC OS&Python脚本无法从Applescript或Py2app执行时读取文件

当我在MAC OS终端上运行我的脚本时,它工作正常。但是当我尝试通过ApplesScript执行脚本或将Finder用作Py2app时,它无法打开文件?

摘录:

`

FILELIST='/tmp/music/playlist.txt' 

def add_song_list(self): 
     try: 
      with open(FILELIST) as fh: 
       for line in fh: 
        songlist=line.rstrip('\n').split(';') 
        theindex = "%s" % self.index 
        self.SongDict[theindex]=songlist 
        #need to append the song title to our ListBox 
        self.list_box.Append(str(songlist[0])) 
        self.index += 1 
     except: 
      print "Error reading playlist file %s" % FILELIST 

`

我得到我的异常消息出现一个对话框。

再次,这在Linux上正常工作。它在OS X 上正常工作,如果我从终端窗口执行它。它甚至适用于PythonLauncher(但我得到一个终端窗口,这是我不知道的)。

但是,如果从Finder中“打开”它或从Applescript执行,它不起作用。

如果我使用'open'命令从终端打开.App,它确实工作正常。

当我在'非'终端模式下执行一个应用程序时,是否有什么关于OS X的信息?

谢谢。

-Jeremy

回答

0

由于py2app是新的给我,我常写的所有工具在Linux上,这是一个学习的经验。

错误信息真的是'红鲱鱼'。有很多问题,我只能通过打开控制台看到它们,即'打开 - 一个控制台'。然后我可以看到几个问题。现在有什么奇怪的,在Linux中运行时我没有任何这些问题。在Mac OS的终端窗口中运行Python脚本时,我也没有遇到这些问题。

所以这里是特定的问题: 由于在OSX中执行'App'并不包括终端shell会话中正常的所有环境变量,所以它没有定义VLC_PLUGIN_PATH,所以我为vlc导入模块失败。我需要添加以下在我的代码的顶部: os.environ['VLC_PLUGIN_PATH']='/Applications/VLC.app/Contents/MacOS/plugins'

接下来,我的文件,它是我的播放列表文件(只是一个纯文本文件),通常会得到编码为Unicode至少在Linux平台上我写的这个。那么,在MAC OS上,只有当它与py2app打包在一起时,它才会抱怨编码不正确。同样,我只在控制台日志中看到了这一点。

所以我的工作是确保它被明确编码。 self.list_box.Append(的unicode(STR(的SongList [0]), 'UTF-8'))

的最后一个问题,我需要删除除子句尝试。我不知道为什么它会触犯例外。我很懒,只是做了'打开',并​​删除了try/except子句 - 它工作正常。

现在py2app将它打包并运行正确。

-J