如何安全地运行不可靠的代码?

wim*_*wim 8 python debugging logging multithreading

假设你正在处理一些你不能相信的笨重的代码,有没有办法安全地运行它而不会失去对脚本的控制?

一个例子可能是一个只在某些时候起作用的函数,并且可能会随机/壮观地失败,你怎么能重试直到它工作?我尝试使用线程模块进行一些黑客攻击但是很难整齐地杀死一个挂起的线程.

#!/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!!":
  # ???
Run Code Online (Sandbox Code Playgroud)

Alf*_*lfe 5

为了安全抵御异常,请使用try/except(但我想你知道).

为了安全地防止挂起代码(无限循环),我知道的唯一方法是在另一个进程中运行代码.这个子进程可以从父进程中终止,以防它不能很快终止.

为了安全抵御令人讨厌的代码(不应该做的事情),请查看http://pypi.python.org/pypi/RestrictedPython.


roo*_*oot 4

您可以尝试在沙箱中运行它。