[PYTHON] Ich möchte wütend auf meine Mutter werden, wenn die Erinnerung knapp ist

Selbst im Jahr 2020 bin ich noch am Leben, während ich mir Sorgen um das Gedächtnis mache

Auf einem 8-GB-Laptop hat VSCode + einige Builds + 20 in Chrome geöffnete Tabs ** schnell keinen Speicher mehr **. Es ist eine sehr strenge Benutzererfahrung wie Stall für jedes Betriebssystem.

Wenn ich darüber nachdenke, wurde ich seit meiner Kindheit oft von meiner Mutter gerügt, weil ich Dinge ausgelassen hatte. Anstatt nur ein Mangel an Gedächtniskapazität, kann dies auf die schwer zu heilende Natur der Kindheit zurückzuführen sein.

Ich denke, es wäre besser, jedes Mal wütend auf meine Mutter zu werden, als mein Verhalten zu korrigieren. Erstellen Sie also eine ** mutterähnliche App **, die Sie warnt, unnötige Software auf Ihrem Desktop zu schließen, wenn der Speicher knapp ist.

Umwelt / Sprache

--Ubuntu18.04 + gnome3 Umgebung

Holen Sie sich die verfügbare Speicherkapazität

Um die unter Linux verfügbare Speichermenge abzurufen, verwenden Sie normalerweise den Befehl ** free **.

$ free
              total        used        free      shared  buff/cache   available
Mem:        8124668     4831144      267628      201468     3025896     2774924
Swap:       2097148         512     2096636

Von diesen ist die verfügbare reale Speicherkapazität ** die verfügbare Spalte in der Mem-Zeile **. Grob gesagt wird dieser Wert (anscheinend) berechnet durch ** [freier Speicherplatz + Kapazität, die sofort freigegeben werden kann, z. B. verwendeter Cache] **.

Der Inhalt dieses kostenlosen Befehls ist eine formatierte Version des Inhalts der Pseudodatei / proc / meminfo. Da Dateien für die Verwendung in Python einfacher zu handhaben sind, ** holen Sie sich Informationen aus / proc / meminfo **.

~$ cat /proc/meminfo 
MemTotal:        8124668 kB
MemFree:          328384 kB
MemAvailable:    2640012 kB
Buffers:          740992 kB
・ ・ ・(Abkürzung)

Versuchen Sie, die Datei in der interaktiven Shell zu öffnen. Verwenden Sie die Funktion split (), um mit Zeilenumbrüchen und Leerzeichen zu trennen, und überprüfen Sie die Reihenfolge, in der Verfügbar verfügbar ist.

>>> f = open('/proc/meminfo')
>>> f.read().split()
['MemTotal:', '8124668', 'kB', 'MemFree:', '318860', 'kB', 'MemAvailable:', '2631456', 'kB', ...]
>>> f.seek(0)
0
>>> f.read().split()[7]
'2625528'

** Sie müssen nur benachrichtigt werden, wenn ein Element mit einem Index von 7 unter 0,5 GB (500.000 KB) fällt. ** ** ** (Die Basis für 0,5 GB ist irgendwie)

Übrigens, wie Sie dem obigen Beispiel entnehmen können, wird der Inhalt ** jedes Mal, wenn Sie ihn lesen **, auch nach dem Öffnen aktualisiert.

Überspringen Sie Benachrichtigungen auf dem Desktop

Verwenden Sie den Befehl notify-send. Das Format ist wie folgt.

$ notify-send -u critical --icon=Symbolname"Titel" "Botschaft"

Machen Sie ein Symbol

Ich habe mir eine Mutterikone von Herrn Irasutoya geliehen und sie benutzt (ich habe auch eine Mutter mit Live-Action in Betracht gezogen, aber sie war mächtig und ich fühlte den emotionalen Groll).

shikaruhaha.png

Platziere das fertige Symbol als ** shikaruhaha.png ** unter ** / usr / share / pixmap **. (Wenn Sie es an einem anderen Ort als / usr / share / pixmap platzieren, müssen Sie den Pfad angeben.)

$ notify-send -u critical --icon=shikaruhaha "Mutters Stimme" "<b>J( 'д')Takashi! Du lässt es nicht chaotisch!</b>"

Wenn Sie das oben genannte ausführen, wird es so.

notify.png

Code

memwarn.py


#!/usr/bin/python3
import time
import subprocess

with open("/proc/meminfo") as f:
    while(True):
        f.seek(0)
        arr = f.read().split()
        available = int(arr[7])
        if available < 500000:
            subprocess.call(['notify-send', "-u", "critical", "--icon=shikaruhaha", "Mutters Stimme", "<b>J( 'д')Takashi! Du lässt es nicht chaotisch!</b>"])
        time.sleep(2)

Bereitstellen

Starten Sie nach dem Anmelden in der X-Umgebung. Platzieren Sie die folgenden Dateien unter / etc / xdg / autostart /. Nach dem Anmelden wird es automatisch gestartet.

/etc/xdg/autostart/memwarn.desktop


[Desktop Entry]
Name=MemoryMother
Type=Application
Exec=/usr/libexec/memwarn.py
OnlyShowIn=GNOME;
NoDisplay=true

Das ist es

Zusammenfassung

Referenz

Recommended Posts

Ich möchte wütend auf meine Mutter werden, wenn die Erinnerung knapp ist
Ich möchte mit dem Linux-Kernel beginnen. Wie ist die Listenkopfstruktur?
Ich möchte ○○ mit Pandas machen
Ich möchte mit Python debuggen
Ein Memorandum beim automatischen Erwerb mit Selen
Beim Versuch, maec 4.0.1.0 mit pip zu installieren, wird eine Fehlermeldung angezeigt
Ich möchte die Position meines Gesichts mit OpenCV überprüfen!
Ich möchte Objekte mit OpenCV erkennen
Ich habe versucht, mit Hy anzufangen
Ich möchte einen Blog mit Jupyter Notebook schreiben
Ich möchte eine Pip-Installation mit PythonAnywhere durchführen
Ich möchte Protokolle mit Python analysieren
Ich möchte mit aws mit Python spielen
Wenn Sie es so verwenden möchten, wie es ist, wenn Sie es mit Lambda-Memo verwenden
Ich möchte meine Gefühle mit den Texten von Mr. Children ausdrücken
Ich erhalte einen UnicodeDecodeError, wenn ich versuche, mit Python sqlalchemy eine Verbindung zu Oracle herzustellen
Ich möchte das Problem des Speicherverlusts bei der Ausgabe einer großen Anzahl von Bildern mit Matplotlib lösen
Ich möchte den Pfad des Verzeichnisses abrufen, in dem die laufende Datei gespeichert ist.
Ich möchte an eine Wiederholung denken können
Ich möchte MATLAB feval mit Python verwenden
Ich möchte datetime.datetime.now () auch mit pytest verspotten!
Ich möchte mehrere Bilder mit matplotlib anzeigen.
Ich möchte 100 Datenwissenschaften mit Colaboratory schlagen
Ich möchte ein Spiel mit Python machen
Ich möchte OREMO mit setParam sein!
Ich habe versucht, CloudWatch-Daten mit Python abzurufen
[OpenCV] Wenn Sie überprüfen möchten, ob es mit imread richtig gelesen wird
Ich erhalte einen UnicodeDecodeError, wenn ich mit mod_wsgi laufe
Ich möchte Passungen aus meinem Kopf machen
Ich möchte Temporäres Verzeichnis mit Python2 verwenden
5 Gründe, warum die Verarbeitung für diejenigen nützlich ist, die mit Python beginnen möchten
Ich möchte die Daten von League of Legends ③ erhalten
[Python] [vscode] Wenn Sie sich über Space-Tab-Mix ärgern
Ich möchte die Daten von League of Legends ② erhalten
Ich möchte -inf nicht mit np.log verwenden
#Unresolved Ich möchte Gobject-Introspection mit Python3 kompilieren
Ich möchte ip vrf mit SONiC verwenden
Ich möchte APG4b mit Python lösen (Kapitel 2)
Ich möchte mit Djangos Migrate von vorne beginnen
Ich möchte League of Legends-Daten erhalten ①
Ich möchte mit Python in eine Datei schreiben
[Python] Ich möchte nur den Index verwenden, wenn ich eine Liste mit einer for-Anweisung schleife
Wenn ich versuche, mysqlclient mit Django zu installieren, wird die Fehlermeldung angezeigt: Befehl 'gcc' ist mit dem Exit-Status 1 fehlgeschlagen.
Was ich getan habe, als ich wütend war, es mit der Option enable-shared einzufügen
Ich möchte eine Fehlermeldung auf Japanisch mit dem Django-Passwortänderungsformular ausgeben
Wenn die Variable, die Sie in Matplotlib als hochgestellt verwenden möchten, aus zwei oder mehr Zeichen besteht
Ich möchte ein Bild mit Lollipop in WebP konvertieren
Ich möchte mit Jubatus (1) eine nicht autorisierte Anmeldung bei Facebook erkennen.
Ich möchte mit einem Knopf am Kolben übergehen
Ich möchte die Optimierung mit Python und CPlex behandeln
Ich möchte mit verstärkendem Lernen einen Berg besteigen
Ich habe versucht, mit Blenders Python script_Part 01 zu beginnen
Ich möchte widerlegen "Das ist in Ruby nicht cool"
Einstellungen, wenn Sie Python-Mecab mit Travis ausführen möchten
Ich habe versucht, mit Blenders Python script_Part 02 zu beginnen
Wenn Sie mit dem Django REST-Framework filtern möchten
Ich möchte mit Python-Datenklasse nach hinten erben