Список аргументов слишком длинный: «/bin/sh» при выполнении «free -h»Linux

Ответить
Anonymous
 Список аргументов слишком длинный: «/bin/sh» при выполнении «free -h»

Сообщение Anonymous »

Попытка вызвать бесплатную команду -h через вызов подпроцесса из Python 3.8.16 в конце тестового сеанса в ОС almalinux v8.9.
def pytest_sessionfinish(session):
cmd = "free -h"
tlogger.debug(f"Executing: {cmd}")
try:
subprocess.run(cmd, shell=True, capture_output=True, text=True, check=True)
except subprocess.CalledProcessError as e:
msg = f"Proceeding after command failed: {cmd}\nSTDERR: {e.stderr.strip()}\nRETURN CODE: {e.returncode}"
logger.warning(msg)

Иногда команда вызывает ошибку [Errno 7] Слишком длинный список аргументов: '/bin/sh'. Когда это происходит, ошибка не улавливается функцией try/Exception, и сеанс pytest немедленно завершается.
Мне удалось зарегистрировать ошибку и выполнить обратную трассировку, инициировав сеанс pytest. из сценария, как показано ниже
try:
pytest.main("pytest tests", plugins=[collector])
except Exception as e:
logger.error("ERROR: Exception while executing pytest command: {}".format(e))
logger.error(traceback.format_exc())

Почему возникает эта ошибка? Как я могу уловить ошибку в ловушке pytest_sessionfinish, чтобы продолжить сеанс pytest? Я не хочу полагаться на запуск команды pytest через скрипт для обнаружения ошибки.
Записанные журналы при запуске команды pytest из скрипта:
2024-11-11 12:23:03 root DEBUG conftest Executing: free -h
2024-11-12 01:07:37 root ERROR main ERROR: Exception while executing pytest command: [Errno 7] Argument list too long: '/bin/sh'
2024-11-12 01:07:37 root ERROR main Traceback (most recent call last)
File "/data/repos/tests/main.py", line 43, in main
pytest.main("pytest tests", plugins=[collector])
File "/var/lib/venv/lib64/python3.8/site-packages/_pytest/config/__init__.py", line 175, in main
ret: Union[ExitCode, int] = config.hook.pytest_cmdline_main(
File "/var/lib/venv/lib64/python3.8/site-packages/pluggy/_hooks.py", line 513, in __call__
return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
File "/var/lib/venv/lib64/python3.8/site-packages/pluggy/_manager.py", line 120, in _hookexec
return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
File "/var/lib/venv/lib64/python3.8/site-packages/pluggy/_callers.py", line 139, in _multicall
raise exception.with_traceback(exception.__traceback__)
File "/var/lib/venv/lib64/python3.8/site-packages/pluggy/_callers.py", line 103, in _multicall
res = hook_impl.function(*args)
File "/var/lib/venv/lib64/python3.8/site-packages/_pytest/main.py", line 320, in pytest_cmdline_main
return wrap_session(config, _main)
File "/var/lib/venv/lib64/python3.8/site-packages/_pytest/main.py", line 308, in wrap_session
config.hook.pytest_sessionfinish(
File "/var/lib/venv/lib64/python3.8/site-packages/pluggy/_hooks.py", line 513, in __call__
return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
File "/var/lib/venv/lib64/python3.8/site-packages/pluggy/_manager.py", line 120, in _hookexec
return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
File "/var/lib/venv/lib64/python3.8/site-packages/pluggy/_callers.py", line 156, in _multicall
teardown[0].send(outcome)
File "/var/lib/venv/lib64/python3.8/site-packages/hpe/lego/_plugin/job_executor.py", line 128, in pytest_sessionfinish
self.execute_job(job)
File "/var/lib/venv/lib64/python3.8/site-packages/hpe/lego/_plugin/job_executor.py", line 115, in execute_job
subprocess.run(cmd, shell=True, capture_output=True, text=True, check=True)
File "/usr/lib64/python3.8/subprocess.py", line 493, in run
with Popen(*popenargs, **kwargs) as process:
File "/usr/lib64/python3.8/subprocess.py", line 858, in __init__
self._execute_child(args, executable, preexec_fn, close_fds,
File "/usr/lib64/python3.8/subprocess.py", line 1704, in _execute_child
raise child_exception_type(errno_num, err_msg, err_filename)
OSError: [Errno 7] Argument list too long: '/bin/sh'


Подробнее здесь: https://stackoverflow.com/questions/791 ... ing-free-h
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»