python停止程序_停止python脚本而不杀死python进程

我想知道是否有一种方法可以在不杀掉进程的情况下,像处理此代码那样,通过编程来停止python脚本的执行:

1

2import sys

sys.exit()

它是相当于ctrl+c的代码

如果"停止",你的意思是"暂停,以后再继续",试试raw_input("Press Enter to continue.")或import pdb; pdb.set_trace()。

Ctrl+C抛出一个KeyboardInterrupt异常,如果未捕获,则终止进程。所以我不知道sys.exit应该有多大的不同。

另外,python是一种解释语言,这就是为什么停止脚本的执行意味着停止解释器的执行。

基本上,ctrl+c保持终端打开,对象在内存中,而sys.exit()会杀死所有东西,不,我不是说暂停。

我是电气工程师,我基本上描述了我在这里看到的,所以,在IDE Spyder中,当我在控制台上执行ctrl+c时,我会终止执行,但控制台仍然打开,并显示所有结果。使用sys.exit(),控制台将不可用。我相信这个问题是非常正确的,因为从Spyder可以实现它,只有通过键盘敲击,而不是通过实际的命令。

只是提出一个例外。

定义自己的异常,

1class HaltException(Exception): pass

把剧本包起来

1

2

3

4

5

6

7

8

9try:

# script goes here

# when you want to stop,

raise HaltException("Somebody stop me!")

except HaltException as h:

print(h)

# now what?

感谢您理解这个问题,这确实解决了问题。

您还可以将整个代码包装在函数中(不要忘记main(),如果name='main'的内容),那么当您想退出时,返回一个随机值。

这是我发现的工作——在解释器中停留,同时停止脚本。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18# ------------------------------------------------------------------

# Reset so get full traceback next time you run the script and a"real"

# exception occurs

if hasattr (sys, 'tracebacklimit'):

del sys.tracebacklimit

# ------------------------------------------------------------------

# Raise this class for"soft halt" with minimum traceback.

class Stop (Exception):

def __init__ (self):

sys.tracebacklimit = 0

# ==================================================================

# ... script here ...

if something_I_want_to_halt_on:

raise Stop ()

# ... script continues ...

我在开发高级文本包时遇到了这个问题。我试图停止一个优秀的文本python包,在重新加载包时测试一些东西。

如果我调用sys.exit(),我会杀死sublime text python解释器,需要重新启动sublime text。但是在搜索之后,我发现解决方案很简单,我只需要调用raise ValueError(),而不是sys.exit():

1

2

3

4import sys

print(sys.path)

sys.exit()

-->

1

2

3

4import sys

print(sys.path)

raise ValueError()

这将在运行print(sys.path)之后立即停止python脚本的执行。尽管它会打印一个大的堆栈跟踪。但是,如果在raise ValueError()之前添加指令sys.tracebacklimit = 1,则将堆栈跟踪调用减少到一行:

1

2

3

4import sys

print(sys.path)

raise ValueError()

-->

1

2

3

4

5import sys

print(sys.path)

sys.tracebacklimit = 1

raise ValueError()

相关问题:

停止运行python脚本而不杀死解释器

在python中手动引发(引发)异常

当然,最简单的解决方案是raise KeyboardInterrupt?

这将产生与终端中的ctrl+c相同的效果,但可以在脚本中的任何位置调用。无需导入或进一步定义。

不是不正确的,但解释为什么未来是好的实践,而不仅仅是一条针对可能在4年前和今天访问此网站的人的路线。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值