So rufen Sie die Prozessstartzeit (oder -verfügbarkeit) in Python ab
Wie kann ich die Prozessstartzeit (oder -verfügbarkeit) in Python unter Linux abrufen?
Ich weiß nur, ich kann "ps -p my_process_id -f" aufrufen und dann die Ausgabe analysieren. Aber es ist nicht cool.
Wenn Sie dies aus dem Python-Programm heraus tun, das Sie messen möchten, können Sie Folgendes tun:
import time
# at the beginning of the script
startTime = time.time()
# ...
def getUptime():
"""
Returns the number of seconds since the program started.
"""
# do return startTime if you just want the process start time
return time.time() - startTime
Ansonsten haben Sie keine andere Wahl, als zu analysieren ps
oder darauf einzugehen /proc/pid
. Eine gute bash
Möglichkeit, die verstrichene Zeit zu ermitteln, ist:
ps -eo pid,etime | grep $YOUR_PID | awk '{print $2}'
Dadurch wird nur die verstrichene Zeit im folgenden Format gedruckt, sodass das Parsen recht einfach sein sollte:
days-HH:MM:SS
(Wenn es weniger als einen Tag läuft, ist es nur HH:MM:SS
)
Die Startzeit ist wie folgt verfügbar:
ps -eo pid,stime | grep $YOUR_PID | awk '{print $2}'
Wenn Ihr Prozess heute nicht gestartet wurde, erhalten Sie leider nur das Datum, an dem er gestartet wurde, und nicht die Uhrzeit.
Der beste Weg, dies zu tun, besteht darin, die verstrichene Zeit und die aktuelle Zeit zu ermitteln und nur ein bisschen zu rechnen. Das folgende Python-Skript verwendet eine PID als Argument und erledigt die oben genannten Schritte für Sie, wobei das Startdatum und die Startzeit des Prozesses ausgedruckt werden:
import sys
import datetime
import time
import subprocess
# call like this: python startTime.py $PID
pid = sys.argv[1]
proc = subprocess.Popen(['ps','-eo','pid,etime'], stdout=subprocess.PIPE)
# get data from stdout
proc.wait()
results = proc.stdout.readlines()
# parse data (should only be one)
for result in results:
try:
result.strip()
if result.split()[0] == pid:
pidInfo = result.split()[1]
# stop after the first one we find
break
except IndexError:
pass # ignore it
else:
# didn't find one
print "Process PID", pid, "doesn't seem to exist!"
sys.exit(0)
pidInfo = [result.split()[1] for result in results
if result.split()[0] == pid][0]
pidInfo = pidInfo.partition("-")
if pidInfo[1] == '-':
# there is a day
days = int(pidInfo[0])
rest = pidInfo[2].split(":")
hours = int(rest[0])
minutes = int(rest[1])
seconds = int(rest[2])
else:
days = 0
rest = pidInfo[0].split(":")
if len(rest) == 3:
hours = int(rest[0])
minutes = int(rest[1])
seconds = int(rest[2])
elif len(rest) == 2:
hours = 0
minutes = int(rest[0])
seconds = int(rest[1])
else:
hours = 0
minutes = 0
seconds = int(rest[0])
# get the start time
secondsSinceStart = days*24*3600 + hours*3600 + minutes*60 + seconds
# unix time (in seconds) of start
startTime = time.time() - secondsSinceStart
# final result
print "Process started on",
print datetime.datetime.fromtimestamp(startTime).strftime("%a %b %d at %I:%M:%S %p")