我需要运行用户提交的应用程序。我的代码如下所示:如何在Python中限制子进程stdout和stderr的大小
def run_app(app_path):
inp = open("app.in", "r")
otp = open("app.out", "w")
return subprocess.call(app_path, stdout=otp, stdin=inp)
现在,由于我无法控制用户将要提交的内容,所以我想限制应用程序输出的大小。其他事情如试图访问未经授权的系统资源和滥用CPU周期正受到执法规则的限制。允许运行的最大时间由父进程处理(在python中)。现在,流氓应用程序仍然可以尝试通过向标准输出写入大量数据来淹没服务器系统,因为知道stdout将被保存到文件中。
我不想在内核模式下使用AppArmors RLIMIT或stdout/stderr文件。能够使用标准库从python执行它会很棒。
我目前正在考虑创建文件的子类,并在每次写入时检查已经写入数据流的数据量。或者创建一个最大长度设置的内存映射文件。
但我觉得可能有更简单的方法来限制文件大小我还没有看到它。
你可以通过['head'](https://linux.die.net/man/1/head)管道输出吗? – Leon
@Leon头将工作。我正在寻找一些说outp.maxsize = 10000的东西。这种方式非常简单。我最终可能会使用RLIMIT或一位朋友共享一个关于/ etc/security/limits的链接 - 要么需要更多的配置。 –