2016-11-27 16 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