Как интерпретатор Python печатает текст? - Исходный код

Любой фанат Python здесь знает, как именно интерпретатор Python выводит вывод. Мне нужен точный исходный файл. До сих пор я обнаружил, что если интерпретатор Python печатает что-либо, он вызывает «PyEval_CallObject», или, может быть, я ошибаюсь. Любые указатели по этому поводу? Я хочу увидеть, как именно Python интерпретирует оператор печати, т. Е. Запись в стандартный вывод. Если бы вы могли указать, как интерпретатор Python записывает в файлы, было бы здорово. Спасибо вам за помощь.


person Community    schedule 07.08.2014    source источник


Ответы (1)


Я не очень разбираюсь в Python, но не так уж сложно найти исходную базу и найти, где эти вещи реализованы.

Похоже, что с оператором печати связано несколько кодов операций Python, и все они сгруппированы в ceval.c.

Все они, кажется, делегируют семейству функций PyFile_* для записи в stdout. Если вы посмотрите на PyFile_WriteString, вы увидите, что это просто вызывает fputs.

Вы также можете найти код для встроенной функции печати полезным (например, __builtin__.print, перенесенным из Python 3).

person DaoWen    schedule 07.08.2014
comment
Фантастика. Запись файла легко fputs. Так что я все еще копаю, чтобы найти метод для печати stdout. Может ли это быть просто обычным оператором printf? - person ; 07.08.2014
comment
@ShankarMJ - Это тоже fputs. Они просто передают дескриптор файла stdout в fputs. Вроде как вызов printf(...) в основном такой же, как fprintf(stdout, ...). - person DaoWen; 07.08.2014
comment
Вы, сэр, получаете мои голоса :) Спасибо. Извините, что забрасываю вопросами, но вы случайно не знаете об этом? stackoverflow.com/questions/25129311/< /а> - person ; 07.08.2014
comment
Интересно. Я задавался вопросом, что Python (или аналогичный) сделал для обработки строк печати с нулевыми байтами, но похоже, что ответ - ничего. - person jbm; 08.08.2014
comment
@jbm - Несколько лет назад я пытался встроить нулевой байт в <title> HTML-документа, используя &#0; или что-то в этом роде. В то время текущая версия Firefox обрезала заголовок до нулевого символа! Вы можете быть удивлены, сколько мест просачивается поведение C-строки... - person DaoWen; 08.08.2014
comment
@DaoWen, это интересно. Влияние C действительно всеобъемлюще. Что касается Python, я только что попробовал (в CPython 2.7.3) print "foo\x00bar" и print "foo\0bar" и оба напечатали foobar. Кажется, мне придется копнуть немного глубже. - person jbm; 08.08.2014