2010-06-07 3 views
1

из интерактивного запроса:STDOUT и STDERR аномалии

>>> import sys 
>>> sys.stdout.write('is the') 
is the6 

Что такое '6' делать там?

другой пример:

>>> for i in range(3): 
...  sys.stderr.write('new black') 
... 
9 
9 
9 
new blacknew blacknew black 

, где числа идут?

ответ

2

В 3.x метод файлового объекта возвращает количество записанных байтов, а интерактивное приглашение выводит возвращаемое значение того, что вы используете. Таким образом, вы печатаете 'is the' (6 байтов), а затем интерпретатор выводит 6 (возврат из записи). See the relevant docs для 3.1.

Этого не происходит до 3.0, поскольку метод записи возвращен None, и поэтому ничего не было напечатано.

+2

не возвращайте его обратно. поведение на моем компьютере одинаково, используя python 3.1.2. и 'write()' файлового объекта в python 3.x возвращают количество записанных байтов ... если OP назначает возвращаемое значение записи для фиктивной переменной, побочный результат исчезнет. –

+0

@Adrien: Спасибо, что указали это! Я исправил себя. –

0

Это возвращаемые значения от записи, напечатанные интерактивной оболочкой.

Попробуйте

>>> 3

, что происходит?

0

Это происходит на Python3, но не на Python2.

Mike прав, что запись в Python3 возвращает количество записанных байтов, которое затем печатается интерактивной оболочкой.

запись в Python2 не возвращается Нет, поэтому ничего не было напечатано