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

MAC OS & Python script not able to read file when executed from Applescript or with 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 if 上运行良好,我从终端 window 执行它。它甚至可以与 PythonLauncher 一起使用(但我打开了一个终端 window,这是我没有做的)。

但是,如果 'opening' 从 Finder 或从 Applescript 执行它,它就不起作用。

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

在 'non' 终端模式下执行应用程序时,是否有关于 OS X 的问题我不知道我正在点击?

谢谢。

-杰里米

由于 py2app 对我来说是新手,而且我通常都在 Linux 上编写工具,所以这是一次学习经历。

错误消息确实是 'red herring'。有多个问题,我只能通过打开控制台才能看到它们,即 'open -a console'。然后我可以看到几个问题。奇怪的是,在 Linux 中 运行 时我没有任何这些问题。当 运行 终端 window 中的 运行 脚本在 Mac OS.

中时,我也没有遇到这些问题

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

接下来,我的播放列表文件(只是一个纯文本文件)通常至少在我写这篇文章的 Linux 平台上会被编码为 un​​icode。嗯,在MACOS上,只有用py2app打包的时候,才报错编码不对。同样,我只在控制台日志中看到了这一点。

所以我的工作是确保它被显式编码。 self.list_box.Append(unicode(str(歌曲列表[0]),'utf-8'))

最后一个问题,我需要删除 try except 子句。我不知道为什么它会遇到异常。我很懒,只是做了一个 'with open' 并删除了 try/except 子句 - 它工作正常。

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

-J