在python中运行脚本时是否有办法在吐出回溯后停止控制台窗口关闭?
答案 0 :(得分:16)
如果您在Windows操作系统上执行此操作,则可以使用以下命令为快捷方式的目标添加前缀:
C:\WINDOWS\system32\cmd.exe /K <command>
这将阻止窗口在命令退出时关闭。
答案 1 :(得分:15)
try:
#do some stuff
1/0 #stuff that generated the exception
except Exception as ex:
print ex
raw_input()
答案 2 :(得分:13)
您可以注册一个顶级异常处理程序,以便在发生未处理的异常时使应用程序保持活动状态:
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代码中调用的事件处理程序中发生异常,这通常不会传播错误,这将非常有用。
答案 3 :(得分: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()
中的input()
已替换为main()
如果您没有try:
函数,则可以在try:
import myscriptname
except [...]
块中使用import语句:
cmd
一个更好的解决方案,一个不需要额外包装脚本的解决方案,就是从IDLE或命令行运行脚本。
在Windows上,转到“开始”&gt;运行,输入cd "\Path\To Your\ Script\"
\Python\bin\python.exe myscriptname.py
并输入。然后输入类似的东西。
C:\Python\
(如果您将Python安装到cd /home/your/script/
)
在Linux / Mac OS X上,它更容易一点,你只需运行python myscriptname.py
然后F5
最简单的方法是使用IDLE,启动IDLE,打开脚本并单击运行按钮(我认为Ctrl+F5
或C:\WINDOWS\system32\cmd.exe /K [existing command]
)。当脚本退出时,窗口不会自动关闭,因此您可以看到任何错误
此外,正如Python 3所建议的那样,在Windows上,您可以创建脚本的快捷方式,并在其中使用“为...”作为前缀的目标。
/K command - Executes the specified command and continues running.
{{1}}
答案 4 :(得分:4)
在UNIX系统上(Windows已在上面介绍过......),您可以更改解释器参数以包含-i标志:
#!/ usr / bin / python -i
从手册页:
-i
当脚本作为第一个参数传递或使用-c选项时,请在执行脚本或命令后进入交互模式。它不会读取$ PYTHONSTARTUP文件。当脚本引发异常时,这对于检查全局变量或堆栈跟踪非常有用。
答案 5 :(得分:2)
在Windows中,不是双击py文件,而是将其拖动到已打开的CMD窗口中,然后按Enter键。它在异常后保持打开状态。
丹
答案 6 :(得分:0)
您的问题不是很清楚,但我认为当发生异常时,python解释器会退出(因此调用控制台窗口会关闭)。
您需要修改python应用程序以捕获异常并在不退出解释器的情况下打印它。一种方法是打印“按ENTER退出”,然后从控制台窗口读取一些输入,有效地等待用户按Enter键。
答案 7 :(得分:0)
如果您使用的是Windows,则可以执行此操作
import os
#code here
os.system('pause')
答案 8 :(得分:0)
看看这个问题的答案:How to find exit code or reason when atexit callback is called in Python?
您可以仅复制此ExitHooks
类,然后自定义自己的foo
函数,然后将其注册到atexit
。
import atexit
import sys, os
class ExitHooks(object):
def __init__(self):
self.exit_code = None
self.exception = None
def hook(self):
self._orig_exit = sys.exit
sys.exit = self.exit
sys.excepthook = self.exc_handler
def exit(self, code=0):
self.exit_code = code
self._orig_exit(code)
def exc_handler(self, exc_type, exc, *args):
self.exception = exc
hooks = ExitHooks()
hooks.hook()
def goodbye():
if not (hooks.exit_code is None and hooks.exception is None):
os.system('pause')
# input("\nPress Enter key to exit.")
atexit.register(goodbye)