2 Probleme: "Systeminformationen direkt abrufen" u

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
pSy
User
Beiträge: 44
Registriert: Montag 4. Oktober 2004, 17:58
Kontaktdaten:

Hallo allerseits...

ich habe da zwei Probleme:
einerseits würde ich gerne wissen ob man folgende Systeminformationen unter Python betriebssystemtransparent (also unter BSD, Linux und evtl Windows) gleichermaßen abrufen kann:
  • CPU Load
    CPU Nice Load
    RAM/SWAP Load
    IO Load (Zugriffe auf HDDs)
    Network Traffic
anderseits hatte ich gern gewusst, wie ich ein externes Programm verwenden kann, welches nicht terminiert. Das heißt, ich starte das Programm von außen und möchte direkt über stdout/stdin mit ihm kommunizieren ohne das Programm zwischendurch beenden zu müssen.

MfG
der Norman
ProgChild
User
Beiträge: 210
Registriert: Samstag 9. April 2005, 10:58
Kontaktdaten:

pSy hat geschrieben:einerseits würde ich gerne wissen ob man folgende Systeminformationen unter Python betriebssystemtransparent (also unter BSD, Linux und evtl Windows) gleichermaßen abrufen kann:
  • CPU Load
    CPU Nice Load
    RAM/SWAP Load
    IO Load (Zugriffe auf HDDs)
    Network Traffic
Schau dir malPyStatGrab an. Ich weis leider nicht, ob das auch auf Windows läuft...
pSy hat geschrieben:anderseits hatte ich gern gewusst, wie ich ein externes Programm verwenden kann, welches nicht terminiert. Das heißt, ich starte das Programm von außen und möchte direkt über stdout/stdin mit ihm kommunizieren ohne das Programm zwischendurch beenden zu müssen.
Das sollte mit Pipes gehen...
Gast

Danke erstmal für die Antwort und PyStatGrab :)
...
Das sollte mit Pipes gehen...
Naja, ich hab das glaube etwas unglücklich formuliert. Das Programm wird schon vom Script aus gestartet und das selbe Script soll dann auf die genannte Weise damit kommunizieren.
So wie zB folgendes:

Code: Alles auswählen

from subprocess import Popen, PIPE
p=Popen([prog,args], stdout=PIPE, stdin=PIPE)
commands = [cmd1, cmd2, cmd3]
out = list()
for cmd in commands:
  p.stdin.write(cmd)
  out.append(p.stdout.readlines())
return out
Problem bei diesem Progrämmchen wäre, die Exception "Broken Pipe", nach dem ersten ausführen. Wie kann ich das umgehen? Ich möchte nämlich in meinem Programm eine Funktion ausführen, die das Programm dann für mich anspricht. Aber wenn ich in 7 oder 8 Sekunden bereits 100 Programmaufrufe habe wäre es doch viel schöner das Programm einmal zu starten und ihm dann die Befehle zu übergeben (das Programm unterstützt diese Funktion).

MfG
ProgChild
User
Beiträge: 210
Registriert: Samstag 9. April 2005, 10:58
Kontaktdaten:

Ich hab dein Programm mal nach Python 2.3 umgeschrieben und ein wenig verändert.

Code: Alles auswählen

from os import popen2

prog = "bash"
args = []

(child_in, child_out) = popen2( prog )

commands = [ 'cd /home', 'ls', 'echo Hallo', 'exit']

out = []
for cmd in commands:
	child_in.write( cmd + "\n" )
	child_in.flush()

out.append( child_out.readlines() )

print out 
So klappt es bei mir. Ich kann mir vorstellen, dass sich dein Programm beendet, und du das nicht mitbekommst. Ein Problem, bei dem Programm ist außerdem, dass du stderr nicht überprüfst...
Gast

danke dafür... klappte bei mir im ersten versuch allerdings nicht. ich habe das kleine script nur schnell zusammen getippselt um mein problem zu veranschaulichen. mein programm ist viel zu groß und komplex um das "auf die schnelle" hier zu zeigen :-S

danke trotzdem dafür... ich werd sehen ob ich was damit anfangen kann.

MfG pSy
Antworten