The Palos Publishing Company

Follow Us On The X Platform @PalosPublishing
Categories We Write About

Build a command-line time tracker

Here’s a simple command-line time tracker written in Python. This tool allows users to start, stop, and view time spent on tasks directly from the terminal.

python
import os import json import time from datetime import datetime DATA_FILE = "time_tracker_data.json" def load_data(): if not os.path.exists(DATA_FILE): return {} with open(DATA_FILE, "r") as f: return json.load(f) def save_data(data): with open(DATA_FILE, "w") as f: json.dump(data, f, indent=4) def start_task(task_name): data = load_data() if task_name in data and data[task_name].get("running"): print(f"Task '{task_name}' is already running.") return now = time.time() task = data.get(task_name, {"sessions": []}) task["running"] = now data[task_name] = task save_data(data) print(f"Started tracking task '{task_name}' at {datetime.fromtimestamp(now)}.") def stop_task(task_name): data = load_data() task = data.get(task_name) if not task or "running" not in task: print(f"No running task found with name '{task_name}'.") return start_time = task.pop("running") duration = time.time() - start_time task["sessions"].append(duration) data[task_name] = task save_data(data) print(f"Stopped tracking task '{task_name}'. Duration: {round(duration / 60, 2)} minutes.") def report(): data = load_data() for task, details in data.items(): total_time = sum(details.get("sessions", [])) if "running" in details: total_time += time.time() - details["running"] print(f"{task}: {round(total_time / 60, 2)} minutes") def main(): import argparse parser = argparse.ArgumentParser(description="Simple CLI Time Tracker") parser.add_argument("command", choices=["start", "stop", "report"], help="Command to run") parser.add_argument("task", nargs="?", help="Task name") args = parser.parse_args() if args.command == "start": if not args.task: print("You must specify a task name to start.") else: start_task(args.task) elif args.command == "stop": if not args.task: print("You must specify a task name to stop.") else: stop_task(args.task) elif args.command == "report": report() if __name__ == "__main__": main()

How to Use:

  1. Save the code to a file, e.g., time_tracker.py.

  2. Run commands:

    • python time_tracker.py start <task_name> – Start tracking a task.

    • python time_tracker.py stop <task_name> – Stop tracking a task.

    • python time_tracker.py report – View total time per task.

This tool uses a local JSON file to store session data and supports multiple tasks. Let me know if you want features like date filtering, export to CSV, or a more advanced UI.

Share this Page your favorite way: Click any app below to share.

Enter your email below to join The Palos Publishing Company Email List

We respect your email privacy

Categories We Write About