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
/proc/..../environ lesen
-
- 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'
-
- 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
-
- 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.
Gruß
Dookie
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
-
- 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
Hans
- C.oden oder
- SuSE 8.1 aufspielen?
Hans
-
- Gründer
- Beiträge: 410
- Registriert: Dienstag 30. Juli 2002, 18:03
- Wohnort: Oestrich-Winkel
- Kontaktdaten:
Wie wäre es mit:
- Suse aufspielen
- 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]