diff --git a/docs/build_docs.py b/docs/build_docs.py
index 201958aa..95a86cde 100644
--- a/docs/build_docs.py
+++ b/docs/build_docs.py
@@ -24,9 +24,9 @@ Note:
- This script is built to be run in an environment where Python and MkDocs are installed and properly configured.
"""
-import os
import re
import shutil
+import subprocess
from pathlib import Path
DOCS = Path(__file__).parent.resolve()
@@ -41,12 +41,12 @@ def build_docs():
# Build the main documentation
print(f'Building docs from {DOCS}')
- os.system(f'mkdocs build -f {DOCS}/mkdocs.yml')
+ subprocess.run(f'mkdocs build -f {DOCS}/mkdocs.yml', check=True, shell=True)
# Build other localized documentations
for file in DOCS.glob('mkdocs_*.yml'):
print(f'Building MkDocs site with configuration file: {file}')
- os.system(f'mkdocs build -f {file}')
+ subprocess.run(f'mkdocs build -f {file}', check=True, shell=True)
print(f'Site built at {SITE}')
diff --git a/docs/en/reference/utils/__init__.md b/docs/en/reference/utils/__init__.md
index ac9f2d48..80211ecf 100644
--- a/docs/en/reference/utils/__init__.md
+++ b/docs/en/reference/utils/__init__.md
@@ -94,7 +94,8 @@ keywords: Ultralytics, Utils, utilitarian functions, colorstr, yaml_save, set_lo
---
-## ::: ultralytics.utils.is_github_actions_ci
+
+## ::: ultralytics.utils.is_github_action_running
---
diff --git a/tests/test_python.py b/tests/test_python.py
index 20e9a4fd..4c740a97 100644
--- a/tests/test_python.py
+++ b/tests/test_python.py
@@ -379,10 +379,10 @@ def test_cfg_init():
def test_utils_init():
"""Test initialization utilities."""
- from ultralytics.utils import get_git_branch, get_git_origin_url, get_ubuntu_version, is_github_actions_ci
+ from ultralytics.utils import get_git_branch, get_git_origin_url, get_ubuntu_version, is_github_action_running
get_ubuntu_version()
- is_github_actions_ci()
+ is_github_action_running()
get_git_origin_url()
get_git_branch()
diff --git a/ultralytics/utils/__init__.py b/ultralytics/utils/__init__.py
index b4cd96ca..88655d2f 100644
--- a/ultralytics/utils/__init__.py
+++ b/ultralytics/utils/__init__.py
@@ -229,19 +229,29 @@ def set_logging(name=LOGGING_NAME, verbose=True):
level = logging.INFO if verbose and RANK in {-1, 0} else logging.ERROR # rank in world for Multi-GPU trainings
# Configure the console (stdout) encoding to UTF-8
+ formatter = logging.Formatter('%(message)s') # Default formatter
if WINDOWS and sys.stdout.encoding != 'utf-8':
try:
if hasattr(sys.stdout, 'reconfigure'):
sys.stdout.reconfigure(encoding='utf-8')
- else:
+ elif hasattr(sys.stdout, 'buffer'):
import io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
+ else:
+ sys.stdout.encoding = 'utf-8'
except Exception as e:
- print(f'ERROR setting UTF-8 encoding: {e}')
+ print(f'Creating custom formatter for non UTF-8 environments due to {e}')
+
+ class CustomFormatter(logging.Formatter):
+
+ def format(self, record):
+ return emojis(super().format(record))
+
+ formatter = CustomFormatter('%(message)s') # Use CustomFormatter to eliminate UTF-8 output as last recourse
# Create and configure the StreamHandler
stream_handler = logging.StreamHandler(sys.stdout)
- stream_handler.setFormatter(logging.Formatter('%(message)s'))
+ stream_handler.setFormatter(formatter)
stream_handler.setLevel(level)
logger = logging.getLogger(name)
@@ -254,7 +264,7 @@ def set_logging(name=LOGGING_NAME, verbose=True):
# Set logger
LOGGER = set_logging(LOGGING_NAME, verbose=VERBOSE) # define globally (used in train.py, val.py, predict.py, etc.)
for logger in 'sentry_sdk', 'urllib3.connectionpool':
- logging.getLogger(logger).setLevel(logging.CRITICAL)
+ logging.getLogger(logger).setLevel(logging.CRITICAL + 1)
def emojis(string=''):