Проблема в том, что Tcl пытается встроить стандартные файловые дескрипторы в каналы, доступные по умолчанию (то есть stdin
, stdout
и stderr
), но это не так, если они не открываются по умолчанию. Это имеет место в Windows, когда выполняется отключение (что происходит в приложениях с графическим интерфейсом на этой платформе). Когда вы работаете с полной оболочкой Tcl, такой как wish , это обходится, но вы встроены, так что это не сработает; код для исправления неполадок не запускается, потому что он является частью запуска оболочки, а не инициализации библиотеки (в конце концов, замена глобально-процессного ресурса, такого как файловые дескрипторы, немного недружелюбно для любой библиотеки, если приложение или пользователь не спросят об этом к!)
Самый простой обходной путь - не писать в stdout
- обратите внимание, что это назначение по умолчанию для команды puts
, поэтому вы должны быть осторожны - и стараться не записывать в stderr
, так как это вероятно, с теми же ограничениями (что означает, что вы должны быть осторожны, как вы ловите ошибки, особенно при тестировании вашего скрипта).