{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Using the Awpy CLI\n", "\n", "Awpy also comes with the capability of parsing demos through the command line interface. After installing Awpy, you can run the following:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[32m2025-02-17 11:28:57.866\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mawpy.demo\u001b[0m:\u001b[36mparse\u001b[0m:\u001b[36m214\u001b[0m - \u001b[34m\u001b[1mStarting to parse spirit-vs-natus-vincere-m2-dust2.dem\u001b[0m\n", "\u001b[32m2025-02-17 11:29:01.834\u001b[0m | \u001b[32m\u001b[1mSUCCESS \u001b[0m | \u001b[36mawpy.demo\u001b[0m:\u001b[36mparse\u001b[0m:\u001b[36m258\u001b[0m - \u001b[32m\u001b[1mFinished parsing spirit-vs-natus-vincere-m2-dust2.dem, took 3.97 seconds\u001b[0m\n", "\u001b[32m2025-02-17 11:29:01.834\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mawpy.demo\u001b[0m:\u001b[36mcompress\u001b[0m:\u001b[36m573\u001b[0m - \u001b[34m\u001b[1mStarting to compress parsed spirit-vs-natus-vincere-m2-dust2.dem\u001b[0m\n", "\u001b[32m2025-02-17 11:29:02.013\u001b[0m | \u001b[32m\u001b[1mSUCCESS \u001b[0m | \u001b[36mawpy.demo\u001b[0m:\u001b[36mcompress\u001b[0m:\u001b[36m605\u001b[0m - \u001b[32m\u001b[1mCompressed demo data saved to /home/xeno/awpy/docs/examples/spirit-vs-natus-vincere-m2-dust2.zip, took 0.18 seconds\u001b[0m\n", "kills.parquet\n", "damages.parquet\n", "footsteps.parquet\n", "shots.parquet\n", "grenades.parquet\n", "infernos.parquet\n", "smokes.parquet\n", "bomb.parquet\n", "ticks.parquet\n", "rounds.parquet\n", "header.json\n" ] } ], "source": [ "!awpy parse spirit-vs-natus-vincere-m2-dust2.dem\n", "\n", "import zipfile\n", "\n", "\n", "def list_zip_contents(zip_path: str) -> list[str]:\n", " with zipfile.ZipFile(zip_path, \"r\") as zip_ref:\n", " contents = zip_ref.namelist()\n", " return contents\n", "\n", "\n", "zip_path = \"spirit-vs-natus-vincere-m2-dust2.zip\"\n", "contents = list_zip_contents(zip_path)\n", "for file_name in contents:\n", " print(file_name)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This will write a zipped file of the parsed demo data (as `.parquet` files). Keep in mind, Awpy doesn't currently write all events, just the main ones that are exposed as properties on the `Demo` class after parsing." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Passing options via the command-line\n", "\n", "You can explore the Awpy cli options by running `awpy parse --help`. Below, we show an example of how to use the most important flags." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[32m2025-02-17 11:29:08.982\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mawpy.demo\u001b[0m:\u001b[36mparse\u001b[0m:\u001b[36m214\u001b[0m - \u001b[34m\u001b[1mStarting to parse spirit-vs-natus-vincere-m2-dust2.dem\u001b[0m\n", "\u001b[32m2025-02-17 11:29:13.061\u001b[0m | \u001b[32m\u001b[1mSUCCESS \u001b[0m | \u001b[36mawpy.demo\u001b[0m:\u001b[36mparse\u001b[0m:\u001b[36m258\u001b[0m - \u001b[32m\u001b[1mFinished parsing spirit-vs-natus-vincere-m2-dust2.dem, took 4.08 seconds\u001b[0m\n", "\u001b[32m2025-02-17 11:29:13.061\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mawpy.demo\u001b[0m:\u001b[36mcompress\u001b[0m:\u001b[36m573\u001b[0m - \u001b[34m\u001b[1mStarting to compress parsed spirit-vs-natus-vincere-m2-dust2.dem\u001b[0m\n", "\u001b[32m2025-02-17 11:29:13.506\u001b[0m | \u001b[32m\u001b[1mSUCCESS \u001b[0m | \u001b[36mawpy.demo\u001b[0m:\u001b[36mcompress\u001b[0m:\u001b[36m605\u001b[0m - \u001b[32m\u001b[1mCompressed demo data saved to /home/xeno/awpy/docs/examples/spirit-vs-natus-vincere-m2-dust2.zip, took 0.44 seconds\u001b[0m\n" ] } ], "source": [ "!awpy parse spirit-vs-natus-vincere-m2-dust2.dem --player-props X,Y,Z,health --verbose" ] } ], "metadata": { "kernelspec": { "display_name": "3.11.8", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.8" } }, "nbformat": 4, "nbformat_minor": 2 }