假設您正在處理一些您不能信任的代碼片段,有沒有辦法在不失去腳本控制的情況下安全地運行它?如何安全運行不可靠的代碼?
一個例子可能是一個函數,它只能在某些時間運行,可能會隨機/壯觀地失敗,您如何才能重試,直到它運行?我嘗試了一些使用線程模塊的黑客攻擊,但是很難整齊地殺死一個掛起的線程。
#!/usr/bin/env python
import os
import sys
import random
def unreliable_code():
def ok():
return "it worked!!"
def fail():
return "it didn't work"
def crash():
1/0
def hang():
while True:
pass
def bye():
os._exit(0)
return random.choice([ok, fail, crash, hang, bye])()
result = None
while result != "it worked!!":
# ???
代碼崩潰有多驚人?在你自己的代碼中使用相同的python解釋器運行它甚至是安全的嗎?如果它使用了破損的c擴展(或誤用了未破壞的擴展),或者可能修改了python全局變量,那麼您可能必須在子流程中完全不同的python解釋器中運行它。 – 2012-03-21 11:18:58