Подтвердить что ты не робот

Странное поведение IPdb IPython

У меня есть действительно странное поведение, которое я просто не понимаю и поэтому не могу объяснить, поэтому я надеюсь, что кто-то здесь поможет мне. Первое, что я заметил, это ipdb, который больше не позволяет мне определять переменные:

ipdb> what=5
ipdb> what
*** NameError: name 'what' is not defined
whatelse=6

И немного позже я нашел ipdb, возвращающий это на моем входе (после повторного запуска кода):

dir()
ipdb> ['args', 'content_type', 'function', 'ipdb', 'item_code', 'kwargs', 'object_id', 'request', 'ud_dict', 'update_querydict', 'what', 'whatelse']
what=5
ipdb> what
5
ipdb> whatelse=7
ipdb> whatelse
ipdb> 6
whatelse
ipdb> 7
whatelse
ipdb> 6
whatelse
ipdb> 7

Для меня это выглядит так, как у меня есть два сеанса отладки, которые я получаю в некоторых странных чередующихся шаблонах. Как я могу избавиться от этого?

изменить Угроза всех процессов python и повторного запуска кода помогли. Сейчас все в порядке. Но поскольку я просто не понимаю, что происходит, мне было бы очень интересно получить ответ на то, что произошло, и как воспроизвести поведение.

4b9b3361

Ответ 1

Если у вас есть два процесса, каждый из которых потребляет stdin, они могут вызвать симптомы, очень похожие на то, что вы описали.

>>> import subprocess
>>> subprocess.Popen('python', shell=True)
<subprocess.Popen object at 0x0000000001DEFEB8>
>>> Python 2.6.5 (r265:79096, Mar 19 2010, 18:02:59) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> a = 5
>>> a
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined
>>> a
5
>>> a = 6
>>> a
5
>>> a
6
>>> a
5
>>> a
6
>>> a
5
>>> a
6

В первый раз, когда я назвал a, это был undefined, хотя я определил его в строке выше. Я называю это снова и это 5. Затем я устанавливаю его на 6, и каждый последующий вызов чередуется между ними. Это похоже на то, что вы испытываете.

stdin - буферизация строк, в результате чего чередующиеся строки текста передаются в чередующиеся процессы, в этом случае два экземпляра Python.