0

我正在用 python 编写代码,这些代码可能会疯狂运行并做一些意想不到的事情。这些可能包括尝试将非常大的数组保存到磁盘并尝试为数组分配大量内存(超过系统上的物理可用内存)。

我想在 Mac OSX 10.7.5 的受限环境中使用以下规则运行代码:

  • 该程序可以将文件写入一个特定的目录而不能写入其他目录(即它不能修改该目录之外的文件,但可以从外部读取文件)
  • 该目录具有最大“容量”,因此程序无法保存千兆字节的数据
  • 程序只能分配有限的内存

有没有人对如何建立这样一个受控环境有任何想法?

谢谢。

4

2 回答 2

0

导入操作系统

stats = os.stat('possibly_big_file.txt')

如果(stats.st_size > TOOBIG):
打印“哦,不......”

于 2013-07-19T21:24:12.990 回答
0

一个简单而幼稚的解决方案,可以扩展以实现您想要的:

WRITABLE_DIRECTORY = '/full/path/to/writable/directory'


class MaxSizeFile(object):
    def __init__(self, fobj, max_bytes=float('+inf')):
        self._fobj = fobj
        self._max = max_bytes
        self._cur = 0
    def write(self, data):
        # should take into account file position...
        if self._cur + len(data) > self._max:
            raise IOError('The file is too big!')
        self._fobj.write(data)
        self._cur += len(data)
    def __getattr__(self, attr):
        return getattr(self._fobj, attr)


def my_open(filename, mode='r', ..., max_size=float('+inf')):
    if '+' in mode or 'w' in mode:
        if os.path.dirname(filename) != WRITABLE_DIRECTORY:
            raise OSError('Cannot write outside the writable directory.')
    return MaxSizeFile(open(filename, mode, ...), max_size)

open然后,改为使用您调用的内置my_open. 对数组也可以这样做。您无需直接分配数组,而是调用一个函数来跟踪已分配的内存量并最终引发异常。

显然,这只给出了非常轻微的限制,但如果编写程序的目的不是引起问题,那就足够了。

于 2013-07-20T13:48:54.677 回答