2009-04-22 64 views

回答

16

如果您在Windows操作系統這樣做,你可以前綴的快捷方式的目標有:

C:\WINDOWS\system32\cmd.exe /K <command> 

這將防止當命令退出時窗口關閉。

+0

對於那些使用一個批處理文件:我的批處理文件以前包含了一行'python -m Projects'來啓動Python並自動導入我的Projects模塊。將其更改爲`cmd/K python -m Projects`,它的工作方式與廣告一樣,在發生錯誤後cmd控制檯保持打開狀態。 – 2013-06-07 22:46:35

0

你的問題不是很清楚,但我認爲當發生異常時,python解釋器退出(因此調用控制檯窗口關閉)。

您需要修改您的python應用程序以捕獲異常並在不退出解釋器的情況下打印它。一種方法是打印「按ENTER退出」,然後從控制檯窗口讀取一些輸入,有效地等待用戶按Enter鍵。

14
try: 
    #do some stuff 
    1/0 #stuff that generated the exception 
except Exception as ex: 
    print ex 
    raw_input() 
+1

您可能需要使用`traceback.print_exc()`,而不是`打印ex`對於更詳細的堆棧跟蹤 – 2014-11-12 14:47:00

7

你可以有第二個腳本,它導入/運行你的主代碼。該腳本將捕獲所有異常,並打印回溯(然後結束前等待用戶輸入)

假設你的代碼使用的是if __name__ == "__main__": main()成語結構..

def myfunction(): 
    pass 

class Myclass(): 
    pass 

def main(): 
    c = Myclass() 
    myfunction(c) 

if __name__ == "__main__": 
    main() 

..和文件被命名爲「 myscriptname.py」(顯然是可以改變的),下面的工作

from myscriptname import main as myscript_main 

try: 
    myscript_main() 
except Exception, errormsg: 
    print "Script errored!" 
    print "Error message: %s" % errormsg 
    print "Traceback:" 
    import traceback 
    traceback.print_exc() 
    print "Press return to exit.." 
    raw_input() 

(注意:raw_input()Python 3被替換爲input()

如果沒有main()功能,你可以使用把import語句在try:塊:

try: 
    import myscriptname 
except [...] 

一個更好的解決辦法,不需要額外的包裝的腳本,是運行腳本從IDLE或命令行。

在Windows上,轉到開始>運行,輸入cmd並輸入。然後輸入類似..

cd "\Path\To Your\ Script\" 
\Python\bin\python.exe myscriptname.py 

(如果你安裝了Python到C:\Python\

在Linux/Mac OS X上它是一個更容易一點,你只要運行cd /home/your/script/然後python myscriptname.py

最簡單的方法就是要使用IDLE,啓動IDLE,打開腳本並單擊運行按鈕(我認爲是F5Ctrl+F5)。當腳本退出時,窗口不會自動關閉,所以你可以看到任何錯誤

此外,如Chris Thornhill建議,在Windows上,您可以創建腳本的快捷方式,並在其屬性前加上目標..

C:\WINDOWS\system32\cmd.exe /K [existing command] 

http://www.computerhope.com/cmd.htm

/K command - Executes the specified command and continues running. 
3

在UNIX系統(Windows已經在上面覆蓋......),你可以改變解釋參數包括-i標誌:

#在/ usr/bin中/ Python的-i

從手冊頁:

-i

當腳本作爲第一個參數傳遞或-c選項時,執行腳本或命令後進入交互模式。它不讀取$ PYTHONSTARTUP文件。當腳本引發異常時,這可以用於檢查全局變量或堆棧跟蹤。

11

時發生未處理的異常可以註冊,保持應用程序正常頂級異常處理程序:

def show_exception_and_exit(exc_type, exc_value, tb): 
    import traceback 
    traceback.print_exception(exc_type, exc_value, tb) 
    raw_input("Press key to exit.") 
    sys.exit(-1) 

import sys 
sys.excepthook = show_exception_and_exit 

如果有異常事件處理程序內部存在的那些由C稱爲這是特別有用代碼,通常不會傳播錯誤。

+0

+1,如果在導入過程中發生異常,甚至可以工作,而不必重新縮進整個文件來嘗試一下。它也適用於* not *從批處理文件運行,例如使用ShellExecuteEx。 – 2014-07-28 09:35:31

1

在Windows而不是雙擊py文件,你可以拖動到一個已經打開的CMD窗口,然後按回車。它在異常後保持打開狀態。

0

,如果你使用的是Windows,你可以做到這一點

import os 

    #code here 

    os.system('pause')