2011-09-23 31 views
3

我正在使用Python,并试图让一行代码执行并执行后,我打电话给sys.exit()让脚本本身“退出”。但是,sys.exit()似乎在它执行的代码行之前执行。以下是我尝试实施的代码:Python sys.exit()有帮助吗?

if something == True: 
    self.redirect('http://www.google.com/') 
    sys.exit() 

该脚本在重定向之前正在退出。我需要重定向来完成,然后执行sys.exit()。由于正在实施的其他代码的性质,我无法使用睡眠命令。任何人都可以给我一些帮助,如何解决/解决这个问题?

+1

我保证''self.redirect()'方法在执行'sys.exit()'之前执行。你的问题是'self.redirect()'方法的**效果**对你来说是不可见的。我们可以猜测,但如果没有关于'self.redirect()'方法的更多信息,真的没有办法回答。 –

回答

7

self.redirect()中可能有一些缓冲或异步。人们在执行print时经常遇到类似的问题,接着是sys.exit()print输出被缓冲,然后进程在刷新进程内输出缓冲区之前退出)。

您可以通过刷新缓冲区和/或等待异步任务完成来解决此问题。

它不清楚这个问题是什么魔术redirect正在做什么,但。

+0

我试图刷新缓冲区,但不幸的是这不起作用;/ – JPapez

+1

self.redirect做什么?你期望看到什么证据来说服你自己执行了它? –

1

尝试使用atexit模块注册要在sys.exit()被调用之前运行的清理函数。

要注册重定向功能作为清除函数:

import atexit 
atexit.register(redirect, 'http://www.google.com') 

注:传递给重定向函数的参数函数对象之后被包括。这里我们不需要括号,因为我们将函数对象传递给它,而不是实际调用函数。

此外,如果您的重定向方法无法正常工作,这不会对您有所帮助。我会确保你的重定向方法通过从Python解释器显式调用它来工作。