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
Wie wäre es mit:
- Suse aufspielen
- 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

sieht so aus, als wenn Dookie gewonnen hätte

habe nur noch ein raed only Filesystem.
Bin gerade im Versuch Nummer 2
Gut, dass ich noch einen Reserverechner habe
Hans