我需要運行用戶提交的應用程序。我的代碼如下所示:如何在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的鏈接 - 要麼需要更多的配置。 –