记下进程停止时的停机时间

时间:2012-08-19 07:18:00

标签: python linux unix time timestamp

我已开始处理多个文件。我记下处理开始时的(时钟)时间。这花了很长时间才完成,我想睡觉,但我想记下处理停止的时间。我不想要一个非常精确的时间阅读,时钟时间对我来说没问题。 是否有任何工具,命令或小脚本可以帮助我实现这一目标。

感谢您的帮助。

我在ubuntu 12.04计算机上并运行一个处理多个文件的可执行文件。

4 个答案:

答案 0 :(得分:1)

你可以使用这个小小的python脚本

import datetime
import subprocess
import time
import sys

p = subprocess.Popen(sys.argv[1:])

while p.poll() is None:
    time.sleep(1)

sys.stderr.write("Process finished at %s\n" % datetime.datetime.now())

示例:

/tmp/watcher.py sleep 10
Process finished at 2012-08-19 10:38:11.233989

答案 1 :(得分:1)

您可以使用psutil module(跨平台)了解新流程和已在运行流程的流程何时完成。在基于sleep()的解决方案时,它可能提供更好的精度:

#!/usr/bin/env python
"""Print the finish time for a process specified by <pid>.

Usage:
    process-finish-time <pid>
"""
import sys
from datetime import datetime
from psutil import NoSuchProcess, Process # pip install psutil

try:
    pid = int(sys.argv[1])
except (IndexError, ValueError):
    sys.exit(__doc__)

try:
    p = Process(pid) # OR use `psutil.Popen()` to start a new process
except NoSuchProcess as e:
    sys.exit(e)

name = None
while p.is_running():
    name = p.name
    p.wait() # block until the process ends
print("Process (%s) finished at %s UTC" % (name, datetime.utcnow()))

如果您想在流程运行时执行某些操作,则可以将timeout传递给p.wait()

答案 2 :(得分:0)

时间命令可能会帮助你

<强>格式

$> time <command>

例如:如果是bash脚本

$> time sh Test.sh

<强>输出

real    0m0.004s
user    0m0.001s
sys     0m0.002s

答案 3 :(得分:0)

最后我能够编写一个帮助我的python脚本。重要的要求是,我应该能够知道时间(当过程停止时),即使过程已经开始。我希望以下脚本可以帮助遇到这个问题的其他人。

import datetime
import commands
import time
import sys 

def main(argv):
  if len(argv) < 2:
    sys.stderr.write("Usage: %s <action>" % (argv[0],))
    return 1
  output = commands.getoutput("ps -e")
  while argv[1] in output:
    output = commands.getoutput("ps -e")
    print argv[1], " running", datetime.datetime.now() 
    #it should be set depending upon the precision a user wants.
    time.sleep(5)
  sys.stderr.write("Process finished at %s\n" % datetime.datetime.now())

if __name__ == "__main__":
  sys.exit(main(sys.argv))