печать по сравнению с stderr

Если вы ссылаетесь на практику написания и поддержки модульных тестов для каждого бита кода, я рискну предположить и заявить, что это не широко используется в игровой индустрии. Есть много причин для этого, но я могу думать о 3 очевидных:

  • Культурные. Программисты консервативны, программисты игр вдвойне.
  • Практические. TDD не очень хорошо подходит для проблемной области (слишком много движущихся частей).
  • Crunchological. Там никогда не хватает времени.

Парадигма TDD лучше всего работает в прикладных областях, которые не очень состоят в состоянии, или, по крайней мере, где движущиеся части не все движутся одновременно, если говорить в разговорной речи.

TDD применимо к частям процесса разработки игры (базовые библиотеки и т. Д.), Но «тестирование» в этой области работы обычно означает выполнение автоматического пролета, случайного тестирования ключа, определения времени загрузки io, отслеживания fps-пиков. , убедившись, что игрок не может извиваться, вызывая зрительную нестабильность, и все в таком духе. Автомат также очень часто является гуманоидом.

TDD может быть полезным инструментом, но его статус как серебряной пули, которая должна быть повсеместно распространена при создании системы, довольно сомнителен. Разработка должна вестись не тестами, а разумом. RDD - это дерьмовая аббревиатура - она ​​не приживется. ;)

28
задан Dawid Ferenczy Rogožan 5 August 2016 в 15:15
поделиться

3 ответа

Это просто две разные вещи. print обычно попадает в sys.stdout . Стоит знать разницу между stdin , stdout и stderr - все они имеют свое применение.

В частности, stdout следует использовать для нормального вывода программы, тогда как stderr следует зарезервировать только для сообщений об ошибках (ненормальное выполнение программы). Существуют утилиты для разделения этих потоков, которые позволяют пользователям вашего кода различать нормальный вывод и ошибки.

34
ответ дан 28 November 2019 в 02:14
поделиться

print может печатать на любом файловом объекте, включая sys.stderr .

print >> sys.stderr, 'Text'

Преимущества использования sys.stderr для ошибок вместо sys.stdout :

  • Если пользователь перенаправил stdout в файл, он все равно видит ошибки на экране.
  • Это не буферизуется, поэтому, если sys.stderr перенаправляется в файл журнала, поэтому меньше шансов, что программа может вылететь до того, как ошибка была зарегистрирована.

Этот ответ написан с учетом Python 2. Для Python 3 используйте вместо этого print ('Text', file = sys.stderr) .

85
ответ дан 28 November 2019 в 02:14
поделиться

Будьте осторожны: здесь есть некоторые тонкости, в том числе, направляются ли потоки на интерактивные устройства. Самым большим сюрпризом является то, что в Python 3 stderr буферизуется по строкам (по крайней мере, в Unix). Например, в окне терминала следующее выводит число каждые две секунды в Python 2:

for n in range(5):
    print >> sys.stderr, n,     # final comma to squelch newline character
    time.sleep(2)

, тогда как в Python 3 следующее выводит числа вместе после завершения цикла:

for n in range(5):
    print(n, file=sys.stderr, end='')    # print n to sys.stderr with no newline char
    time.sleep(2)
31
ответ дан 28 November 2019 в 02:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: