Найти - Пользователи
Полная версия: Инструкция "sys.stdout.shell" выдает ошибку "AttributeError: '_io.TextIOWrapper' object has no attribute 'shell'."
Начало » Python для новичков » Инструкция "sys.stdout.shell" выдает ошибку "AttributeError: '_io.TextIOWrapper' object has no attribute 'shell'."
1 2
Olezhka
Пишу самодельные модули для сокращения написания рутинных функций типа работы с реестром, файлами. Решил выпендриться и попробовать выводить в консоль текст исключений, возникающих в модуле, красным шрифтом. Нагуглил, что для этого нужно юзать инструкцию “sys.stdout.shell”. Сделал вот так:
 import sys
try:
	color = sys.stdout.shell
except AttributeError:
	raise RuntimeError('Use IDLE')
color.write('Ошибка такая-то возникла!\n','console')
'console' - это установка красного цвета шрифта.
При отладке в среде “IDLE” все работает корректно и цветной текст выводится. Но когда я пробую запустить скрипт “py” двойным кликом по нему или через “vbs”-скрипт, выдает ошибку “AttributeError: ‘_io.TextIOWrapper’ object has no attribute ‘shell’ ” и программа не запускается.
Если что, скрипт “vbs” у меня такой:
 Set WshShell = CreateObject("WScript.Shell")
WshShell.Run chr(34) & "C:\Program files\Budilnik_4457\Budilnik.pyw", 0, True
Set WshShell = Nothing
py.user.next
Попробуй sys.stdout.write(). Вообще-то это можно через print() делать. Они ничем в этом плане не отличаются.
  
>>> print('abc\x0d\x0adef\x0d\x0a', end='')
abc
def
>>>
Для вывода цветных текстов у консоли есть такая распознавалка символьных последовательностей. Если ты выводишь такую символьную последовательность в консоль, то консоль понимает, что это цветовая последовательность и просто меняет цвет, а не выводит эти символы дальше пользователю.
Olezhka
py.user.next
print('abc\x0d\x0adef\x0d\x0a', end='')
У меня данный метод не работает. Цвет не меняется.
Olezhka
py.user.next
Попробуй sys.stdout.write()
Попробовал. Данный метод принимает один аргумент. Строку. Печатает. А как цвет-то менять?
py.user.next
Olezhka
У меня данный метод не работает. Цвет не меняется.
Так там и нет изменения цвета.

Вот так в Linux зелёным выводит слово Text
  
>>> print('\x1b[32mText\x1b[0m\n', end='')
Text
>>>
Olezhka
py.user.next
так в Linux
Но у меня-то не Линукс!
py.user.next
Olezhka
Но у меня-то не Линукс!
Да я виндой больше десяти лет не пользуюсь уже. Играю там только иногда в SWAT4.
Но для винды все те же коды работают в консоли.
Olezhka
py.user.next
Играю там только иногда в SWAT4
А я в “Overwatch 2” и “StarCraft 2”
py.user.next
Но для винды все те же коды работают в консоли
А у меня не работают твои коды. Вот, что консоль выдает:
 Text
py.user.next
Попробуй инфу отсюда
https://stackoverflow.com/questions/2048509/how-to-echo-with-different-colors-in-the-windows-command-line

Сначала батник сделай и посмотри, какие нужно строки для echo писать там. Дальше там ESC заменяется на \x1b . Думаю, там можно сделать.

Olezhka
А я в “Overwatch 2” и “StarCraft 2”
Я в Linux играю в Warcraft II , в Starcraft Broodwar , Age of Empires и другие.
Также играл в Linux в Call of Duty, прошёл первую часть.
Также играл в Linux в Silent Hill, Need for Speed и Tekken на эмуляторе PS1.
Также у меня в Linux все восьмибитные игры стоят.
Это без фанатизма, просто в детстве или просто давно ещё прошёл их.
Olezhka
Нихрена у меня цветной текст консоль не выдает! Даже “clint” не работает!
https://github.com/kennethreitz-archive/clint/tree/master/examples
И это не работает!
https://stackoverflow.com/questions/2048509/how-to-echo-with-different-colors-in-the-windows-command-line
Создал cmd-файл. Весь текст выводится одним цветом
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB