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