2009-04-22 38 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')