Basic I/O ========= Stdout and stderr ----------------- Stdout and stderr in your running program will be sent back to the stdout and stderr of your ``lager python`` process. .. code-block:: python :caption: stdio.py :name: Script that prints to stdout and stderr import sys print('This is stdout') print('This is stderr', file=sys.stderr) Save this as ``stdio.py``. Then, we'll run it and redirect the output streams to files: ``lager python stdio.py > stdout 2> stderr`` .. code-block:: console ➜ lager python stdio.py > stdout 2> stderr ➜ cat stdout This is stdout ➜ cat stderr This is stderr Setting exit codes ------------------ The exit code of ``lager python`` will be set to the exit code of your script. This can be used to check success or failure, which is particularly useful in a headless or automated environment such as `Continuous Integration `_. .. code-block:: python :caption: failure.py :name: Script that sets non-zero exit status print('Hello, world!') raise SystemExit('Failed!') Save this as ``failure.py``. Then, we'll run it using ``lager python failure.py`` .. code-block:: console ➜ lager python failure.py Hello, world! Failed! ➜ echo $? 1 ``$?`` is a special shell environment variable that holds the exit status of the most recent command. Since it is non-zero, that means the program exited with an error. Command line arguments ---------------------- Command-line arguments can be sent to your ``lager python`` program. Use a ``--`` to demarcate the end of the ``lager python`` arguments and the arguments for your program. .. code-block:: python :caption: arguments.py :name: Script that prints command line arguments import sys print(sys.argv[1:]) Save this as ``arguments.py``. Then, we'll run it using ``lager python arguments.py -- arg1 arg2 arg3 --option 4 'foo bar'`` .. code-block:: console ➜ lager python arguments.py -- arg1 arg2 arg3 --option 4 'foo bar' ['arg1', 'arg2', 'arg3', '--option', '4', 'foo bar'] Environment variables --------------------- You can also set environment variables that will be accessible within your ``lager python`` program. There are two different ways to set environment variables - ``--env VAR=VALUE`` syntax is used to directly set a variable named ``VAR`` to ``VALUE``. ``--passenv FOO`` can be used to pass the value of an environment variable named ``FOO`` that is already defined. This is especially useful with `Continuous Integration `_, when you may have secrets that exist in your environment that you do not wish to expose on the command line .. code-block:: python :caption: env.py :name: Script that prints environment variables. import os print(f'FOO = {os.environ["FOO"]}') print(f'BAZ = {os.environ["BAZ"]}') Save this as ``env.py``. Then, we'll run it using ``FOO=BAR lager python env.py --passenv FOO --env BAZ=qux``. .. code-block:: console ➜ FOO=BAR lager python env.py --passenv FOO --env BAZ=qux FOO = BAR BAZ = qux