首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >奇怪的IPython ipdb行为

奇怪的IPython ipdb行为
EN

Stack Overflow用户
提问于 2012-05-23 15:55:45
回答 1查看 1.3K关注 0票数 19

我有一些非常奇怪的行为,我只是不理解,因此无法解释,所以我希望这里的人能帮助我。我注意到的第一件事是ipdb不再让我定义变量了:

代码语言:javascript
复制
ipdb> what=5
ipdb> what
*** NameError: name 'what' is not defined
whatelse=6

过了一会儿,我发现ipdb在我的输入上返回了这个(在再次运行代码之后):

代码语言:javascript
复制
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编辑:杀死所有进程并重新运行代码确实有帮助。现在一切都恢复正常了。但由于我就是不明白发生了什么,我很有兴趣知道发生了什么,以及如何重现这种行为。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-29 09:11:35

如果您有两个进程,每个进程都使用stdin,则它们可能会导致与您所描述的症状非常相似的症状。

代码语言:javascript
复制
>>> 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时,它是未定义的,尽管我已经在上面的代码行中定义了它。我再次调用它,结果是5。然后我将它设置为6,随后的每次调用都会在这两个调用之间交替。这似乎就是你正在经历的事情。

stdin是行缓冲,导致交替的文本行传递给交替的进程,在本例中为两个Python实例。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10715724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档