/proc/..../environ lesen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

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
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

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
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

[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
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

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
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

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
piddon
Gründer
Beiträge: 410
Registriert: Dienstag 30. Juli 2002, 18:03
Wohnort: Oestrich-Winkel
Kontaktdaten:

:D

Wie wäre es mit:
  1. Suse aufspielen
  2. Danach Coden
irc: #python.de @ irc.freenode.net | [url=http://pythonwiki.pocoo.org]python-wiki[/url] | [url=http://www.pythonwiki.de/PythonDeForum/Faq]python-forum FAQ[/url]
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Ich weiß was besseres

Debian aufspielen und sich an nem stabilen System freuen :)


Dookie
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

: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
Antworten