Hi,
Gibt es eine Funktion, die mir relativ komfortabel die Startzeit oder die Laufzeit eines beliebigen Programmes, das auf einem *nix-System läuft, ausgibt?
Lässt sich natürlich auch über den Befehl ps machen. aber ist nicht so ganz komfortabel.
Ich bin mir ziemlich sicher, dass ich sowas schonmal gesehen habe, bin mir aber nicht sicher ob es Python war.
Laufzeit oder Startzeit von Programmen?
timelarf hat geschrieben:Gibt es eine Funktion, die mir relativ komfortabel die Startzeit oder die Laufzeit eines beliebigen Programmes, das auf einem *nix-System läuft, ausgibt?
Strenggenommen nicht unbedingt eine Python-Frage...
Du hast gelesen was ich schrieb?keppla hat geschrieben:timelarf hat geschrieben:Gibt es eine Funktion, die mir relativ komfortabel die Startzeit oder die Laufzeit eines beliebigen Programmes, das auf einem *nix-System läuft, ausgibt?
Strenggenommen nicht unbedingt eine Python-Frage...
Ich will ermitteln, seit wann bzw. wie lange ein beliebiges Programm läuft und es nicht starten, um zu wissen wie lange es läuft (dafür wäre time gut, ja). Dafür nutzt man auf der Konsole im allgemeinen ps.
Und um es nochmal zu wiederholen:
Lässt sich natürlich auch über den Befehl ps machen. aber ist nicht so ganz komfortabel.
Ich bin mir ziemlich sicher, dass ich sowas schonmal gesehen habe, bin mir aber nicht sicher ob es Python war.
Ja. Du hast es lediglich mehrdeutig Formuliert.Du hast gelesen was ich schrieb?
so ist es schon eindeutiger.Ich will ermitteln, seit wann
ist deine Frage also vielleicht eher "gibt es einen Befehl in python, der..."?Lässt sich natürlich auch über den Befehl ps machen. aber ist nicht so ganz komfortabel.
Ich bin mir ziemlich sicher, dass ich sowas schonmal gesehen habe, bin mir aber nicht sicher ob es Python war.
Was meinst du mit komfortabel? Was erwartest du als Antwort vom Befehl?
Code: Alles auswählen
ps -o start='' -p 6845
Nunja, zum Anzeigen ist das sicherlich ok, wenn ich es allerdings weiter verarbeiten möchte, stehe ich vor dem Problem, dass die Ausgabe unterschiedlich ist:keppla hat geschrieben: ist deine Frage also vielleicht eher "gibt es einen Befehl in python, der..."?
Was meinst du mit komfortabel? Was erwartest du als Antwort vom Befehl?
sieht in meinen Augen nicht so unkonfortabel aus.Code: Alles auswählen
ps -o start='' -p 6845
Bei Prozessen, die schon länger als 24 Stunden laufen, wird die Startzeit als "Monat Tag" angezeigt, bei allen anderen als Stunden:Minuten:Sekunden, d.h. um es weiter in meinem Programm nutzen zu können, muss ich es in ein einheitliches Format bringen. Ich hatte gehofft, Python würde mir das in irgendeiner Form abnehmen.
- Matflasch
- User
- Beiträge: 41
- Registriert: Donnerstag 25. März 2004, 15:42
- Wohnort: Hamburg
- Kontaktdaten:
Wie wäre es mit:
"man ps"
Das kannst du dann ja auseinander nehmen
edit:
Code: Alles auswählen
ps -o lstart -p 7571
STARTED
Wed Dec 5 15:40:44 2007
Das kannst du dann ja auseinander nehmen
edit:
Code: Alles auswählen
ps -o lstart="" -p 7571
Wed Dec 5 15:40:44 2007
Ok, soweit ist das natürlich einfacher, da es einheitlich ist. Danke für den Hinweis.Matflasch hat geschrieben: "man ps"
Das kannst du dann ja auseinander nehmen
Aber auseinanderklamuesern muss man es natürlich immernoch und davor wollte ich mich eigentlich drücken.
- Matflasch
- User
- Beiträge: 41
- Registriert: Donnerstag 25. März 2004, 15:42
- Wohnort: Hamburg
- Kontaktdaten:
Ok, in Python:
Oder soll es direkt in der Shell sein?
Code: Alles auswählen
import subprocess
cmd = 'ps -o lstart="" -p 9543'
pinfo = subprocess.Popen(cmd, shell='true', stdout=subprocess.PIPE)
pstart = pinfo.stdout.read().split()
print pstart
['Tue', 'Jan', '29', '10:55:01', '2008']
Tss, das ist aber simpel. Ich bräuchte dann noch den Code, mit dem ich einer Process-ID die Startzeit zuordnen kann und damit dann die aktuelle Laufzeit bestimmen kann. Kannst du das grade noch schreiben?Matflasch hat geschrieben:Ok, in Python:Oder soll es direkt in der Shell sein?Code: Alles auswählen
import subprocess cmd = 'ps -o lstart="" -p 9543' pinfo = subprocess.Popen(cmd, shell='true', stdout=subprocess.PIPE) pstart = pinfo.stdout.read().split() print pstart ['Tue', 'Jan', '29', '10:55:01', '2008']
(Um sicherzugehen, dass ich keinen Unmut erzeige: die letzten zwei Sätze waren nicht ernst gemeint).
Jedenfalls danke für eure Vorschläge - auch wenn die Antwort auf meine ursprüngliche Frage "nein" war, aber ich habe ja verdeutlicht bekommen dass meine Faulheit unbegründet war.
Eine Shell-Lösung:
Code: Alles auswählen
#!/bin/sh
PID=$1
START=$(date --date="$(ps -o lstart='' -p $PID)" +%s)
NOW=$(date +%s)
DURATION=$(( $NOW - $START ))
echo " start: $(date --date=@$START +'%Y-%m-%d %H:%M:%S')"
echo "duration: $(date --date=@$DURATION +'%jd %H:%M:%S')"
dateutil.parser existiert ja auch noch:
Und die Info steht sicherlich auch irgendwo unterhalb /proc, so dass man sich nicht mal die Mühe machen muss, ps aufzurufen.
Code: Alles auswählen
[lunar@nargond]-[20:15:53] >> /home/lunar
[1]--> from dateutil.parser import parse
[lunar@nargond]-[20:16:01] >> /home/lunar
[2]--> parse('Wed Dec 5 15:40:44 2007 ')
Out[2]: datetime.datetime(2007, 12, 5, 15, 40, 44)
Unter `/proc/` stehen die Zeiten in Jiffies. Wie lang ein Jiffie ist, hängt vom Kernel ab und ich habe noch keine Möglichkeit gefunden das irgendwie heraus zu finden. Abgesehen von Konstanten in C-Header-Dateien, aber auf die hat man zur Laufzeit eines Python-Programms ja nicht unbedingt Zugriff.
Was ist mit /proc/config.gz, Option CONFIG_HZ oder /proc/timer_list, Timer "clock 1"?BlackJack hat geschrieben:Unter `/proc/` stehen die Zeiten in Jiffies. Wie lang ein Jiffie ist, hängt vom Kernel ab und ich habe noch keine Möglichkeit gefunden das irgendwie heraus zu finden.
Sieht schlecht aus:
Code: Alles auswählen
bj@s8n:~$ ls /proc/config*
ls: /proc/config*: No such file or directory
bj@s8n:~$ ls /proc/timer*
ls: /proc/timer*: No such file or directory
Tja, schon blöd, wenn Ubuntu den Kernel so kastriert, nicht wahr?BlackJack hat geschrieben:Code: Alles auswählen
bj@s8n:~$ ls /proc/config* ls: /proc/config*: No such file or directory bj@s8n:~$ ls /proc/timer* ls: /proc/timer*: No such file or directory
Jetzt wüsste ich aber auch nicht mehr, wo man die Info noch herkriegen kann.