LINUX.ORG.RU

Как избавться от (python) pdb?

 ,


1

2

Привет

В последнее время при падении питоновской программы (как я понял), запускается некий pdb и просит что-то ввести. Проблема в том, что это тормозит всю установку emerge, и требует ручного вмешательства.

Как избавиться от pdb?

Пример:

$ emerge --unmerge noto-cjk
 * This action can remove important packages! In order to be safer, use
 * `emerge -pv --depclean <atom>` to check for reverse dependencies before
 * removing packages.

 media-fonts/noto-cjk
    selected: 20150615
   protected: none
     omitted: none

All selected packages: =media-fonts/noto-cjk-20150615

>>> 'Selected' packages are slated for removal.
>>> 'Protected' and 'omitted' packages will not be removed.

>>> Waiting 5 seconds before starting...
>>> (Control-C to abort)...
>>> Unmerging in: 5 4 3 2 1
>>> Unmerging (1 of 1) media-fonts/noto-cjk-20150615...

...

--Return--
> /usr/lib64/python3.6/site-packages/portage/util/_eventloop/asyncio_event_loop.py(76)_internal_caller_exception_handler()->None
-> pdb.set_trace()
(Pdb)

★★★★★

Последнее исправление: Kroz (всего исправлений: 1)

У тебя закончилось свободное пространство на жёстком диске.

Если нет возможности почистить домашнюю директорию, то начни с:

$ sudo rm -rf /usr/portage/distfiles/*

Deleted
()

найти в [свзяных] скриптах import pdb|-m pdb и выпилить?
хотя да, место действительно закончилось. лул.

etwrq ★★★★★
()
Ответ на: комментарий от Kroz

Ты указал проблему:

Проблема в том, что это тормозит всю установку emerge

Я тебе показал её решение.

Без свободного пространства на жёстком диске у тебя в любом случае ничего не установится, поэтому избавиться от pdb — это не решение.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от Deleted

В топике четко указан вопрос: как избавиться от pdb. Я прошу дать ответ именно на него, а не додумывать другие вопросы.

Без свободного пространства на жёстком диске у тебя в любом случае ничего не установится, поэтому избавиться от pdb — это не решение.

Ошибаешься. Потому, что додумываешь. Потому, что отвечаешь не на поставленный вопрос.

Kroz ★★★★★
() автор топика
Последнее исправление: Kroz (всего исправлений: 1)
Ответ на: комментарий от etwrq

найти в [свзяных] скриптах import pdb|-m pdb и выпилить?

Очень надеюсь, что можно как-то по-другому. Ведь скрипты - это пакетный менеджер gentoo, не хотелось бы лезть в исходники. Может есть какая-то переменная окружения, может emerge имеет какой-то параметр...

Kroz ★★★★★
() автор топика
Ответ на: комментарий от Kroz

pdb вызывается не только при проблеме с местом.

Решать проблемы, связанные с причинами, по которым он вызывается. А не со следствиями в виде вызова pdb.

Иначе следующим тредом от тебя будет «как починить Gentoo».

Deleted
()
Ответ на: комментарий от Deleted

Решать проблемы, связанные с причинами, по которым он вызывается. А не со следствиями в виде вызова pdb.

Я не спрашиваю как устранить причину. Я спрашиваю как изменить автоматический error handling.

Kroz ★★★★★
() автор топика
Ответ на: комментарий от Kroz

в юзах флагов debug|pdb нету.
попробуй напиши заранее фейловый тестовый скрипт, и запусти его для выяснения python-specific|script-specific, во втором варианте делай что я говорил. в первом разбирайся с ебилдами и шли баг-репорты. судя по документации pdb работает только когда явно указан(import|-m).

etwrq ★★★★★
()
Последнее исправление: etwrq (всего исправлений: 1)

вызов pdb ->portage/util/_eventloop/asyncio_event_loop.py:76
pdb.set_trace()
выключить можно через env PORTAGE_INTERNAL_CALLER=0

arrecck ★★★
()

ставь вендавс

anonymous
()
Ответ на: комментарий от Kroz

значение internal_caller нельзя поменять через конфиг.
Изначально он ставится в False, можно посмотреть, где он устанавливается в True. Я не разобрался до конца.

тесты

import portage
from portage.util._eventloop.asyncio_event_loop import AsyncioEventLoop
from portage.exception import PortageException

l = AsyncioEventLoop()
l.call_exception_handler({'message':"test",'exception':Exception()})

print("enable internal caller")
portage._internal_caller = 1
l = AsyncioEventLoop()
l.call_exception_handler({'message':"test",'exception':Exception()})


Наверное, стоит баг написать, чтобы поведение изменили.

arrecck ★★★
()

просит что-то ввести

Cкорми ему /dev/null или yes c

DonkeyHot ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.