21 lines
664 B
Python
21 lines
664 B
Python
#!/usr/bin/env python3
|
|
"""Measure child CPU/wall time without depending on GNU time."""
|
|
import pathlib
|
|
import resource
|
|
import subprocess
|
|
import sys
|
|
import time
|
|
|
|
before = resource.getrusage(resource.RUSAGE_CHILDREN)
|
|
started = time.monotonic()
|
|
result = subprocess.run(sys.argv[2:], check=False)
|
|
elapsed = time.monotonic() - started
|
|
usage = resource.getrusage(resource.RUSAGE_CHILDREN)
|
|
user = usage.ru_utime - before.ru_utime
|
|
system = usage.ru_stime - before.ru_stime
|
|
pathlib.Path(sys.argv[1]).write_text(
|
|
f"cpu_user={user:.3f} cpu_system={system:.3f} wall={elapsed:.3f} "
|
|
f"cpu_percent={(user + system) / elapsed * 100:.1f}%\n"
|
|
)
|
|
sys.exit(result.returncode)
|