我需要使用python在特定應用程序中打開文件。我將默認使用默認的應用程序位置/文件名打開文件;但是,如果應用程序無法打開,我想處理該錯誤並給用戶一些其他選項。在Python中打開應用程序時出錯處理
我瞭解到目前爲止該subprocess.call是做到這一點的最好辦法,而不是system.os
應用:/Applications/GreatApp.app
這工作得很好
subprocess.call(['open','/Applications/GreatApp.app','placeholder.gap'])
但是,當我開始添加try/except循環時,它們似乎什麼都不做。 (請注意在應用程序名稱的空間 - 我使用的是不正確的名稱來強制除外)
try:
subprocess.call(['open','/Applications/Great App.app','placeholder.gap'])
except:
print 'this is an error placeholder'
我還是會看到在Python
The file /Applications/Great App.app does not exist.
最近我」顯示以下錯誤已發現某種形式的錯誤處理如下。正在看retcode的價值正確的方式去做這件事?
try:
retcode = subprocess.call("open " + filename, shell=True)
if retcode < 0:
print >>sys.stderr, "Child was terminated by signal", -retcode
else:
print >>sys.stderr, "Child returned", retcode
except OSError, e:
print >>sys.stderr, "Execution failed:", e
原來RETCODE是沒有辦法的辦法,因爲這兩個正確和不正確的名稱賦予大於0
是啊,在RETCODE做法是正確的。也許嘗試交換最後一個代碼片段中的「subprocess.call」參數與第一個參數? 'shell = True'會導致一個間接級別,在這種情況下應該是不必要的,因爲'open'不是一個shell命令。 – jtmoulia
感謝您的確認 - 我更深入地發現,如果retcode <0:發現更改爲如果retcode == 1:將處理文件名/路徑的錯誤。我假設subprocess.call的返回碼只返回1或0? (編輯:sp) – Simon
「subprocess.call()」的'args'參數中的第一項不應該是應用程序嗎? – martineau