2011-09-23 32 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解釋器顯式調用它來工作。