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 平台上会被编码为 unicode。嗯,在MACOS上,只有用py2app打包的时候,才报错编码不对。同样,我只在控制台日志中看到了这一点。
所以我的工作是确保它被显式编码。
self.list_box.Append(unicode(str(歌曲列表[0]),'utf-8'))
最后一个问题,我需要删除 try except 子句。我不知道为什么它会遇到异常。我很懒,只是做了一个 'with open' 并删除了 try/except 子句 - 它工作正常。
现在 py2app 将其打包并正确运行。
-J
我有一个简单的应用程序,我使用 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 平台上会被编码为 unicode。嗯,在MACOS上,只有用py2app打包的时候,才报错编码不对。同样,我只在控制台日志中看到了这一点。
所以我的工作是确保它被显式编码。 self.list_box.Append(unicode(str(歌曲列表[0]),'utf-8'))
最后一个问题,我需要删除 try except 子句。我不知道为什么它会遇到异常。我很懒,只是做了一个 'with open' 并删除了 try/except 子句 - 它工作正常。
现在 py2app 将其打包并正确运行。
-J