Python、Macports和缓冲问题

7
抱歉如果我发错了地方 - 我不清楚问题出在哪里。 当使用由Macports 2.3.3构建的Python版本,在运行Mac OX 10.10时,我看到一些非常有趣的行为。 我已经完全重新安装了Macports,并在iMac和Macbook Air上复制了这个问题,并创建了一个新用户以确保它不是我的环境问题。 这在上周还没有发生过,而在此期间某些事情发生了很大的变化。 在调用Python之前,一切都正常工作。
$ python
Python 3.4.3 (default, Aug 26 2015, 18:29:14) 
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.56)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 1+1
>>> 2
^D>>> 

"

在输入结果之前,>>>会被打印出来,但是在我使用Control-D退出Python后,它仍然会被打印出来。

此时,所有的输入都不会被打印在终端上(在iTerm2中也是如此)。如果我输入echo 'this is ouput; input is hidden',我只能看到:

"
$ this is ouput; input is hidden

如果我重新调用解释器,事情会变得更加奇怪。

$ Python 3.4.3 (default, Aug 26 2015, 18:29:14) 
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.56)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 1+1
>>> 2
^C
KeyboardInterrupt
>>> ^D
>>> exit()
>>> $ 

Control-C被打印出来了(这不是正常情况),而control-D则被简单地忽略了 - 我必须输入exit才能退出提示符。

使用reset重置终端可以解决所有问题,但与Python解释器进行交互仍然是一场噩梦。

我可以在Python 2.7、3.3、3.4和3.5中复制这种行为,这使我相信我正在错误的地方寻找问题。

从Python网站下载的打包安装程序工作正常,不会出现这种行为。

$ python3
Python 3.5.0 (v3.5.0:374f501f4567, Sep 12 2015, 11:00:19) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 1+1
2
>>> 
KeyboardInterrupt
>>> ^D

我很困惑。我不确定在哪里寻求帮助解决这个问题。我该如何找出问题所在?
我在Macport Trac上开了一个错误报告,后来才意识到在这里提问可能更好。

你是否已经安装了 readline - Burhan Khalid
你说得对 - 原来Macports有一个补丁可以用libedit替换readline,这就是问题的原因。请参见下面@eborisch的答案。 - Andrew Pinkham
值得注意的是,这个问题也会影响到 pdb 提示符,使得调试有些麻烦。 - donkopotamus
1个回答

6

这在一定程度上解决了问题。在虚拟环境之外和新的虚拟环境中,问题消失了。在现有的虚拟环境中,问题仍然存在。我感到很困惑,因为据我所知,virtualenvwrapper 在每个环境中创建符号链接。不清楚那里发生了什么。:/ 等我有更多时间时,我会更好地研究这个问题。 - Andrew Pinkham
我已经安装了 py34-readline 并解决了在非虚拟的 Python 3.4 中使用时出现的问题; 然而,这个问题仍然存在于使用 pyvenv-3.4 创建的新的虚拟环境中。有关如何解决这些问题的任何想法吗? - pistachionut
我相信在对libedit进行一些上游更改后,问题终于得到了解决。 - eborisch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接