From ca3d70078b9e729d12e3e5969fd46d6b8a55fb98 Mon Sep 17 00:00:00 2001 From: Roman Donchenko Date: Fri, 6 Dec 2024 14:58:08 +0200 Subject: [PATCH] CLI: log to stderr instead of stdout (#8784) Since the `ls` command produces machine-readable output, we need to ensure that any log messages produced do not corrupt that output. Logging to stderr is also conventional; Python's `StreamHandler` even defaults to it. This breaks the `import` command tests, because previously they were looking at the last log message. I don't think we should be testing log messages, so add a proper `print` to this command. This also makes it consistent with the `create` command. --- changelog.d/20241206_135902_roman_cli_logging.md | 4 ++++ cvat-cli/src/cvat_cli/_internal/commands.py | 3 ++- cvat-cli/src/cvat_cli/_internal/common.py | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 changelog.d/20241206_135902_roman_cli_logging.md diff --git a/changelog.d/20241206_135902_roman_cli_logging.md b/changelog.d/20241206_135902_roman_cli_logging.md new file mode 100644 index 000000000000..30ecb58a8921 --- /dev/null +++ b/changelog.d/20241206_135902_roman_cli_logging.md @@ -0,0 +1,4 @@ +### Changed + +- \[CLI\] Log messages are now printed on stderr rather than stdout + () diff --git a/cvat-cli/src/cvat_cli/_internal/commands.py b/cvat-cli/src/cvat_cli/_internal/commands.py index 324d427a64b8..efda05c58454 100644 --- a/cvat-cli/src/cvat_cli/_internal/commands.py +++ b/cvat-cli/src/cvat_cli/_internal/commands.py @@ -418,11 +418,12 @@ def configure_parser(self, parser: argparse.ArgumentParser) -> None: ) def execute(self, client: Client, *, filename: str, status_check_period: int) -> None: - client.tasks.create_from_backup( + task = client.tasks.create_from_backup( filename=filename, status_check_period=status_check_period, pbar=DeferredTqdmProgressReporter(), ) + print(f"Created task ID", task.id) @COMMANDS.command_class("auto-annotate") diff --git a/cvat-cli/src/cvat_cli/_internal/common.py b/cvat-cli/src/cvat_cli/_internal/common.py index 415a1340958e..6f37e3d74eaa 100644 --- a/cvat-cli/src/cvat_cli/_internal/common.py +++ b/cvat-cli/src/cvat_cli/_internal/common.py @@ -74,7 +74,7 @@ def configure_logger(logger: logging.Logger, parsed_args: argparse.Namespace) -> formatter = logging.Formatter( "[%(asctime)s] %(levelname)s: %(message)s", datefmt="%Y-%m-%d %H:%M:%S", style="%" ) - handler = logging.StreamHandler(sys.stdout) + handler = logging.StreamHandler(sys.stderr) handler.setFormatter(formatter) logger.addHandler(handler) logger.setLevel(level)