如何终止一个脚本?

30 浏览
0 Comments

如何终止一个脚本?

我如何提前退出脚本,就像在PHP中的die()命令一样?

0
0 Comments

如何终止一个脚本?

有一种方法是使用sys.exit()函数:它会引发一个SystemExit异常,从而终止脚本的运行。这是一种常见的方法,但它不够优雅,因为直接引发一个内置异常不如使用sys.exit()这样的封装函数更可取。

另一种方法是使用raise SystemExit语句,看起来更加优雅,但不推荐使用,因为它直接引发一个内置异常,而不是使用sys.exit()这样的封装函数。

对我来说,这是一种完美的方法:退出正在运行的脚本,但不退出IDLE。

0
0 Comments

在Python中,提前终止脚本的一种简单方法是使用内置的quit()函数。不需要导入任何库,这种方法高效且简单。

quit()函数只会终止调用它的脚本,而sys.exit()函数会终止所有Python脚本。

以下是一个示例:

# 做一些操作
if this == that:
  quit()

有人知道这个命令在Python 2和Python 3中是否有不同的工作方式吗?

有人知道这个命令是会退出整个解释器,还是只会停止脚本的执行吗?特别是在Spyder中运行的脚本,解释器是否仍然保持交互状态,还是会被终止?只尝试停止脚本的继续执行,但保持解释器的交互性。

对我来说它显示'quit'未定义。我正在使用Python 3。

我使用的是Python 3.7,quit()会停止解释器并关闭脚本。

根据文档quit()函数是“用于交互式解释器,不应在程序中使用”。

我使用的是Python 3.7和Jupyter Lab,但我的脚本完全忽略了Quit()Exit()。有什么建议吗?

sys.exit()会引发一个SystemExit异常,如果未捕获,将终止解释器。它不会立即终止脚本,并且不会影响在不同Python进程中启动的脚本。由于它是一个异常,如果在try-except-finally块中调用,finally块仍会被执行。

quit()能够停止多线程应用程序吗?

.paszko:根据我的经验,它比os.exitsys.exit效果更好,但我似乎无法使其从另一个线程中的主线程的输入语句中跳出。

0
0 Comments

如何终止一个脚本?

有时候我们需要在脚本运行过程中提前结束它,这时候就需要用到终止脚本的方法了。在Python中,我们可以使用sys.exit()来实现脚本的终止。

sys.exit()是通过抛出SystemExit异常来实现的,这样可以保证在try语句的finally子句中指定的清理操作可以被执行,并且可以在外部层次上拦截退出尝试。

sys.exit()的可选参数arg可以是一个整数,表示退出状态,默认为0,即“正常终止”。如果参数是一个整数,非零值被视为“异常终止”,不同的操作系统对于退出状态的范围有不同的要求,大多数系统要求在0-127范围内,超出范围的结果是不确定的。某些系统有一种约定,为特定的退出码分配特定的含义,但是这些约定通常不完善;Unix程序通常使用2表示命令行语法错误,使用1表示其他类型的错误。如果传递了其他类型的参数,None等同于传递了0,其他任何对象将被打印到stderr,并导致退出码为1。特别地,sys.exit("some error message")是一个在发生错误时退出程序的快速方法。

需要注意的是,由于sys.exit()“只是”抛出一个异常,它只在从主线程调用时才会终止进程,并且该异常不会被拦截。

如果想要进行“硬退出”,可以使用os._exit(errorcode),这是一种不太友好的退出方式,因为它不允许解释器在进程终止之前进行任何清理。另一方面,它确实会终止整个进程,包括所有正在运行的线程,而sys.exit()只会在主线程中调用时退出,其他线程不会被终止。

如果在后台线程中引发了sys.exit(),那么sys.exit()不起作用(不会终止进程,只会终止线程)。

有没有一种方法可以在不引发异常的情况下结束脚本?我已经通过将相关标志传递到stdout并通过管道传递给Popen来输出了脚本,所以在这种情况下,异常带来的麻烦比解决的问题还要多。

为什么我使用这种方法时会收到以下警告信息:UserWarning: To exit: use 'exit', 'quit', or Ctrl-D. warn("To exit: use 'exit', 'quit', or Ctrl-D.", stacklevel=1)

如果你使用Tkinter,它将不会停止root进程的mainLoop和显示的窗口。为了实现这一点,你需要额外加上root.destroy()。

在多线程环境中,sys.exit()不会停止进程。

但是如何终止脚本的执行并自动触发清理呢?

如果你正确地构造了if语句,通常可以避免使用sys.exit(),当没有其他任务需要执行时,脚本将自然退出。只有当某些任务未完成并且用户不愿意等待时,才需要使用sys.exit()。

总结起来,使用sys.exit()可以在脚本运行过程中提前终止脚本,通过传递不同的参数可以指定不同的退出状态。在多线程环境中,sys.exit()只会终止当前线程,不会终止进程的执行。如果想要立即终止整个进程,可以使用os._exit()方法。但需要注意的是,使用sys.exit()或os._exit()方法来终止脚本时,可能会存在一些清理操作未完成的问题,需要根据具体情况来选择适合的方法。

0