Ausgabe eines programms speichern

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
reggid
User
Beiträge: 120
Registriert: Dienstag 8. Oktober 2002, 19:04
Wohnort: Dinslaken
Kontaktdaten:

Donnerstag 21. August 2003, 08:06

Hallo
Ich will unter Linux mit Hilfe des programms ps die Prozesse einlesen, die gerade auf meinem System laufen und dieses Ergebnis in einem Strng speichern.

Code: Alles auswählen

>>> import os
>>> os.popen('/bin/ps','w')  #geht auch genau so gut mit os.system('/bin/ps')
<open file '/bin/ps', mode 'w' at 0x810ed98>
>>>   PID TTY          TIME CMD
  233 pts/0    00:00:00 bash
  266 pts/0    00:00:00 python
  327 pts/0    00:00:00 ps <defunct>
  329 pts/0    00:00:00 ps
Jetzt will ich das, was mit angezeigt wird nicht ausgedruckt bekommen, sondern nur in einem String gespeichert haben, damit ich mir dann dort die PID holen kann und geziehlt die Prozesse beenden kann.
Natürlich verwende ich dann nicht nur ps sondern ps aux und mit grep filter ich mir meine Prozesse raus, die ich haben will.
Voges
User
Beiträge: 564
Registriert: Dienstag 6. August 2002, 14:52
Wohnort: Region Hannover

Donnerstag 21. August 2003, 08:37

Meinst Du sowas:

Code: Alles auswählen

>>> import os
>>> os.popen('ps').readlines()
['  PID TTY          TIME CMD\n', ' 1261 pts/1    00:00:00 bash\n', ' 1267 pts/1    00:00:00 python\n', ' 1283 pts/1    00:00:00 ps\n']
>>>
Jan
reggid
User
Beiträge: 120
Registriert: Dienstag 8. Oktober 2002, 19:04
Wohnort: Dinslaken
Kontaktdaten:

Donnerstag 21. August 2003, 13:10

Ja danke so gehts, dann kann ich nämlich mit

Code: Alles auswählen

>>> liste=os.popen('ps aux |grep apache').readlines()  
>>> liste[0].split()[1] #PID ausgeben
'212'
pSy
User
Beiträge: 44
Registriert: Montag 4. Oktober 2004, 17:58
Kontaktdaten:

Mittwoch 22. Dezember 2004, 14:05

Hallo... ich würde dir empfehlen den paramter -C für ps zu verwenden. Dann sollte er jede Instanz eines Programmes mit angegebenen Namen finden, egal wo und in welcher Konsole es läuft.
Mit --format kannst du dann auch noch die Informationen so anpassen, wie du sie brauchst.
Zum Beispiel:

Code: Alles auswählen

from commands import getstatusoutput as gso
(err,out) = gso('ps f -C "mplayer" --no-header --format "user uid tty command"'
if err == 0:
    x = out.split()
    print "User:\t "+x[0]
    print "UID:\t "+x[1]
    print "TTY:\t "+x[2]
    print "CMD:\t "+x[3]
elif err == 256:
    print "Mplayer seems not started."
else:
    print "Damn, something goes wrong!"
pSy
User
Beiträge: 44
Registriert: Montag 4. Oktober 2004, 17:58
Kontaktdaten:

Mittwoch 22. Dezember 2004, 14:20

aber die eigentlich Frage: "Wie speichere ich die Ausgabe eines Programmes" ist nie gestellt worden.

Das ist nämlich, was mich interessiert. WIe kann ich eine Verbindung zu der Konsole herstellen, in der das Programm läuft und so die Ausgaben auslesen. Wichtig dabei ist, dass das Programm unabhängig von meinem Pythonscript gestartet wird, das heißt also, dass Script weis vorher nichts über das Programm und sucht sich die Informationen über den Befehl ps raus.
Dann soll es eine Verbindung zur Konsole herstellen und auf die Ausgaben des Programmes reagieren können.
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Mittwoch 22. Dezember 2004, 15:02

HI. Wenn ich dich richtig verstehe, willst du die Ausgabe von einem bereits laufenden Programm erhalten... das ist eine ganz andere Sache, als ein Programm zu starten und dann die Ausgabe auszulesen... und offen gestanden hab ich dafür nicht einmal eine Ansatzmöglichkeit. Es ist dagegen aber kein Problem, das Programm von Python aus zu starten und die Ausgabe sowohl in Python zu benutzen als auch auf den Console zu printen...
pSy
User
Beiträge: 44
Registriert: Montag 4. Oktober 2004, 17:58
Kontaktdaten:

Mittwoch 22. Dezember 2004, 15:08

Ja, zweiteres ist kein Problem... aber ich will ja von der Konsole lesen.
Weist du vielleicht nen Weg, wie ich die Ausgabe auf eine fremde Konsole printen kann?
Obwohl das sicherlich auch nicht bringt. So ne Art

Code: Alles auswählen

 echo bla >/dev/pts/2 
ist ja machbar, nur ein

Code: Alles auswählen

 cat /dev/pts/2 
klappt irgendwie nicht :(
Antworten