MAC OS&从Applescript或Py2app执行时,Python脚本无法读取文件

时间:2016-11-27 21:55:20

标签: python macos py2app

我有一个简单的应用程序,我正在使用wxpython和libvlc来播放mp3文件。文件列表是一个文本文件,其中包含每个mp3文件标题和相应的文件名。简单的'for loop'来读取每一行......

当我在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

1 个答案:

答案 0 :(得分:0)

由于py2app对我来说是新手,我通常在Linux上编写工具,这是一种学习经验。

错误信息实际上是一个'红鲱鱼'。有多个问题,我只能通过打开控制台来看到它们,即'open -a console'。然后我可以看到几个问题。现在有什么奇怪的,我在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子句。我不知道它为什么会遇到异常。我很懒,只是做了'打开'并删除了try / except子句 - 它运行正常。

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

-J