2016-05-23 76 views
0

我試着當我使用下列命令從終端運行它使用運行在OS X上的launchd Python腳本,它的工作原理:Python腳本在終端的作品,但不是的launchd

$ /Library/Frameworks/Python.framework/Versions/3.4/bin/python3.4 /Users/me/path/to/script.py 

這裏是我的啓動了在ProgramArguments項下具有相同命令的plist文件,但它不起作用。

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>Label</key> 
    <string>net.me.my-script</string> 
    <key>ProgramArguments</key> 
    <array> 
     <string>/Library/Frameworks/Python.framework/Versions/3.4/bin/python3.4</string> 
     <string>/Users/me/path/to/script.py</string> 
    </array> 
    <key>StartInterval</key> 
    <integer>86400</integer> 
</dict> 
</plist> 

的launchd的最初沒有工作,所以我試圖在終端手動運行它,我得到了一個錯誤,並意識到我需要提及的文件,我在讀和在python腳本及其全部寫入路徑,所以我解決了這個問題。這使腳本運行在終端,但它並沒有解決launchd中的問題(是的,我卸載並加載了多次)。

我跑launchctl list,發現旁邊列出的我的plist一個1退出代碼,然後我檢查/var/log/system.log,發現該錯誤消息Service exited with abnormal code: 1但是這所有的錯誤信息,我可以找到。

基於'最後修改'的日期和來自finder的東西,它似乎在python腳本中打開一個xml文件,但它沒有寫任何東西。它似乎也沒有在腳本中打開json文件。

再一次,所有這些東西都能在終端上手動運行,所以我認爲它必須是plist或launchd問題。

+0

腳本試圖讀取和寫入的文件在哪裏,它們具有什麼權限? –

+0

它們只是一個xml和一個json文件,它們與腳本位於同一位置。他們對每個人都有完整的r/w權限。這兩個文件的完整文件路徑是在腳本中指定的,我發現在發生第一個錯誤後我需要執行此操作。 – chiiidog

+0

它是launchdaemon還是launchagent(位置),以及在.plist上設置了owner:group ?關於「退出異常代碼的服務:1」錯誤; python腳本實際上做了什麼?您應該在可能相關的同一時間在Console.app中查看其他事件。 –

回答

0

已解決。我能夠設置StandardErrorPath和StandardOutPath鍵並查看腳本拋出的錯誤。在操縱xml文件時,我只是在f.write()f.read()的實例上獲得了幾個UnicodeEncodeError s,但是隻有在通過launchd運行腳本時。我將with open('file.xml', 'w') as f:替換爲with io.open('file.xml', 'w', encoding='utf8') as f:,讀取實例也是一樣,並且工作正常!任何人都知道爲什麼這在我的IDE和終端工作正常,但不是在launchd?全部使用相同的解釋器。

相關問題