Seite 1 von 1

/proc/..../environ lesen

Verfasst: Dienstag 15. Oktober 2002, 19:02
von hans
Wie lese ich /proc/ ...... /environ? ... ist durch die Prozessnummer zu ersetzen.

Die Datei (ich bezeichne die mal als solche) enthält lauter Variablen der Form VARIBLE=WERT. Die Einträge sind durch Hex 00 getrennt. Mich interessiert insbesondere der Eintrag DISPLAY=

Hans

Verfasst: Dienstag 15. Oktober 2002, 19:51
von Dookie

Code: Alles auswählen

envfile = open("/proc/.../environ")
environ = envfile.read().split("\x00") # Daten lesen und in Liste aufsplitten an allen '\x00'
envfile.close()

displaydef = filter(lambda x: x[:8]=="DISPLAY=", environ)[0] # Datum mit "DISPLAY=" am Anfang ausfiltern
# Ergebnis ist eine Liste mit nur einem Eintrag, darum das [0] am Ende, wir brauchen ja nur den String

display = displaydef[8:] # X-Display extrahieren
# display enthält jetzt in der Regel ':0'
Dookie

Verfasst: Dienstag 15. Oktober 2002, 19:55
von hans
[quote="Dookie"]

Code: Alles auswählen

environ = envfile.read().split("\x00") # Neuland für mich. Gibts nicht in Delphi.

#und das auch nicht.......
displaydef = filter(lambda x: x[:8]=="DISPLAY=", environ)[0] # Datum mit "DISPLAY=" am Anfang ausfiltern
[/quote]

THX
Werde mir das mal reinziehen.

Hans

Verfasst: Mittwoch 16. Oktober 2002, 16:43
von Dookie
Ich habe mal ein kleines Script aus dem obigen Fragment erstellt.

Code: Alles auswählen

#!/usr/bin/python

def get_environ(procID):
    """
    '/proc/.../environ' lesen und in Liste aufsplitten
    die einzelnen Einträge sind durch '\\x00' getrennt.
    Am Ende ein Dictionary mit den Einträgen erstellen.
    """
    envfile = open("/proc/"+str(procID)+"/environ","r")
    envdata = envfile.read().split("\x00") # lesen und gleich in liste aufsplitten
    envfile.close()
    
    # daraus jetzt ein Dictionary machen
    result = {}
    for item in envdata:
        if item:
            key, data = item.split("=") # Eintrag an = in Schlüssel und Datum aufsplitten
            result[key.strip()] = data.strip() # Eintrag in result-Dictionary einfügen
    return result

if __name__ == "__main__": # als Script direkt aufgerufen
    import sys
    
    if len(sys.argv) == 2: # Aufruf: getenviron.py processID
        environ = get_environ(sys.argv[1])
        keys = environ.keys()
        keys.sort()
        for key in keys:
            print key, "=", environ[key]

    elif len(sys.argv) == 3: # Aufruf: getenviron.py processID key
        environ = get_environ(sys.argv[1])
        key = sys.argv[2].upper()
        print key, "=", environ[key]

    else: # Aufruf: ohne oder mit mehr als 2 Parametern
        print "usage:", sys.argv[0], "processID [key]"

Gruß

Dookie

Verfasst: Mittwoch 16. Oktober 2002, 17:29
von hans
Hi Dookie, habe auch schon ne lauffähige Lösung. Stecke nur gerade vor einer schwerwiegenden Entscheidung was ich heute machen soll
  • C.oden oder
  • SuSE 8.1 aufspielen?
Ich glaub ich entscheide mich mal für letzteres.

Hans

Verfasst: Mittwoch 16. Oktober 2002, 17:49
von piddon
:D

Wie wäre es mit:
  1. Suse aufspielen
  2. Danach Coden

Verfasst: Mittwoch 16. Oktober 2002, 17:57
von Dookie
Ich weiß was besseres

Debian aufspielen und sich an nem stabilen System freuen :)


Dookie

Verfasst: Mittwoch 16. Oktober 2002, 19:12
von hans
:cry: sieht so aus, als wenn Dookie gewonnen hätte :cry: habe nur noch ein raed only Filesystem.

Bin gerade im Versuch Nummer 2

Gut, dass ich noch einen Reserverechner habe :lol:

Hans