python - 如何安全地运行一段不可靠的代码?

标签 python multithreading debugging logging

假设您正在处理一些您无法信任的可疑代码,有没有办法在不失去对脚本的控制的情况下安全地运行它?

一个例子可能是一个只在某些时候有效的函数,并且可能随机/惊人地失败,你怎么能重试直到它有效?我尝试使用线程模块进行一些黑客攻击,但无法整齐地杀死挂起的线程。

#!/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!!":
  # ???

最佳答案

为了避免异常,请使用 try/except(但我猜你知道)。

为了避免挂起代码(无限循环),我知道的唯一方法是在另一个进程中运行代码。这个子进程可以从父进程中终止,以防它没有足够快地终止。

为了防止讨厌的代码(做它不应该做的事情),看看 http://pypi.python.org/pypi/RestrictedPython .

关于python - 如何安全地运行一段不可靠的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9803475/

相关文章:

python - Python 的 HTML 调试 pretty-print

python - 集成在客户端的轻量级网络服务器

python - 如何修复 ipython 中的 "DistributionNotFound: The ' jsonschema' distribution ...”

c++ - 如何使用原子指针执行双缓冲?

multithreading - 随着更多 CPU 的添加,原子操作会变慢吗?

ios - Xcode/iOS - 尝试通过简单的打印来进行控制台调试,但无法正常工作。不知道如何找到问题

python - 使用 freezegun,为什么 pytz.utc 和 utcnow() 输出不同的日期时间?

java - 区分 Java 线程和 OS 线程?

debugging - WP7 调试无需通过 USB 进行网络共享?

python - scipy convolve2d 输出错误的值