Попытка вызвать бесплатную команду -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
Список аргументов слишком длинный: «/bin/sh» при выполнении «free -h» ⇐ Linux
1731440297
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())
[b]Почему возникает эта ошибка? Как я могу уловить ошибку в ловушке pytest_sessionfinish, чтобы продолжить сеанс pytest?[/b] Я не хочу полагаться на запуск команды 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'
Подробнее здесь: [url]https://stackoverflow.com/questions/79182504/argument-list-too-long-bin-sh-when-executing-free-h[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия