Seite 1 von 1

Ausgabe eines programms speichern

Verfasst: Donnerstag 21. August 2003, 08:06
von reggid
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.

Re: Ausgabe eines programms speichern

Verfasst: Donnerstag 21. August 2003, 08:37
von Voges
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

Verfasst: Donnerstag 21. August 2003, 13:10
von reggid
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'

Verfasst: Mittwoch 22. Dezember 2004, 14:05
von pSy
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!"

Verfasst: Mittwoch 22. Dezember 2004, 14:20
von pSy
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.

Verfasst: Mittwoch 22. Dezember 2004, 15:02
von Milan
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...

Verfasst: Mittwoch 22. Dezember 2004, 15:08
von pSy
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 :(