# Copyright (C) 2012 Anaconda, Inc
# SPDX-License-Identifier: BSD-3-Clause
import os
import sys
from logging import getLogger
from ..base.context import context
from ..common.compat import encode_environment
from ..gateways.disk.delete import rm_rf
from ..gateways.subprocess import subprocess_call
from ..utils import wrap_subprocess_call
from .common import validate_prefix
def execute(args, parser):
# create run script
script, command = wrap_subprocess_call(
context.root_prefix,
validate_prefix(
context.target_prefix or os.getenv("CONDA_PREFIX") or context.root_prefix
),
args.dev,
args.debug_wrapper_scripts,
args.executable_call,
use_system_tmp_path=True,
)
# run script
response = subprocess_call(
command,
env=encode_environment(os.environ.copy()),
path=args.cwd,
raise_on_error=False,
capture_output=not args.no_capture_output,
)
# display stdout/stderr if it was captured
if not args.no_capture_output:
if response.stdout:
print(response.stdout, file=sys.stdout)
if response.stderr:
print(response.stderr, file=sys.stderr)
# log error
if response.rc != 0:
log = getLogger(__name__)
log.error(
f"`conda run {' '.join(args.executable_call)}` failed. (See above for error)"
)
# remove script
if "CONDA_TEST_SAVE_TEMPS" not in os.environ:
rm_rf(script)
else:
log = getLogger(__name__)
log.warning(f"CONDA_TEST_SAVE_TEMPS :: retaining main_run script {script}")
return response.rc