In meinem aktuellen Projekt habe ich einen Webserver, der Linux-Befehle aufruft, um Informationen zu erhalten, die dann auf der Website angezeigt werden. Das Problem damit ist, dass der Webserver auf einem winzigen Embedded-Gerät läuft (es ist im Grunde ein Konfigurations-Tool für das Gerät), das nur 256 MB RAM hat. Der Webserver selbst benötigt mehr als die Hälfte des freien Arbeitsspeichers, den ich auf diesem Gerät habe.subprocess.check_output ohne hohe Speicherauslastung
Jetzt, wenn ich versuche, subprocess.check_output() zu verwenden, um einen Befehl aufzurufen, verdoppelt die Gabel kurz die RAM-Nutzung (weil es den Elternprozess oder so etwas klont, soweit ich verstehe) und stürzt somit das Ganze mit einem ab "Out of Memory", obwohl der genannte Prozess ziemlich klein ist.
Da das Gerät ziemlich billige Flash-Chips verwendet, die sich als überlastet erwiesen haben, möchte ich keine Swap-Lösungen oder andere Lösungen verwenden, die auf der Erhöhung des virtuellen Speichers basieren.
Was ich bis jetzt versucht habe, ist, eine Sh-Sitzung zu Beginn des Programms zu poppen, wenn es immer noch wenig Speicher belegt, und dann die Befehle in diese sh-Sitzung zu schreiben und die Ausgabe zu lesen. Das funktioniert irgendwie, aber es ist ziemlich instabil, da ein falscher "Ausgang" oder etwas Ähnliches das Ganze zum Absturz bringen kann.
Gibt es eine Lösung ähnlich wie subprocess.check_output(), die meine Speicherbelegung nicht verdoppelt?
Welchen Webserver benutzen Sie BTW? –
Es ist ein selbstprogrammiertes Programm, das web.py als Framework verwendet. – Dakkaron
Möchten Sie es irgendwo posten, damit wir einen Blick riskieren können? –