为什么python输入函数吞下字符?

时间:2016-01-19 18:05:43

标签: python macos

OS X上的Python 2.7.10和Python 3.5.0 Yosemite(10.10.5)为我输入输出函数的输出中的字符:

a = 'foo'; a = input('abcdefghijklmnopqrstuvwxyz\nabcdefghijklmnopqrstuvwxyz\nabcdefghijklmnopqrstuvwxyz\nabcdefghijklmnopqrstuvwxyz\nabcdefghijklmnopqrstuvwxyz\nabcdefghijklmnopqrstuvwxyz\nabcdefghijklmnopqrstuvwxyz\nabcdefghijklmnopqrstuvwxyz\nabcdefghijklmnopqrstuvwxyz\n')

给出

abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz 
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
zbcdefghijklmnopqrstuvwxy 
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
yzcdefghijklmnopqrstuvwx

令人惊讶的是,打印功能而不是输入功能不会发生这种情况。

1 个答案:

答案 0 :(得分:3)

这很可能与Mac OSX Terminal.app使用的编码和您正在使用的窗口的宽度有关。如果编码是xterm-256color,我能够重新创建输出。如果我使我的窗口与您发布的代码行一样宽,那么它的工作正常。

窗口宽度为290,xterm-256color编码:

crypto.createCipheriv(algorithm, key, iv)

如果我使窗口比代码行更窄并且它包装它会得到与你所看到的类似的结果。

窗口宽度为60,xterm-256color编码:

abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz

我能够将我的终端从xterm-256color更改为ansi,无论我的窗口有多宽或多窄,输出总是预期的输出。

窗口宽度为60且ansi编码:

abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
ghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
mnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
stuvwxyzijklmnopqr 
abcdefghijklmnopqrstuvwxyz
yzcdefghijklmnopqrstuvwx 

这似乎与Python无关,但它与Mac OSX的窗口编码有关。