Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 22, 2022 13:29:17

Olezhka
Зарегистрирован: 2022-12-13
Сообщения: 118
Репутация: +  0  -
Профиль   Отправить e-mail  

Инструкция "sys.stdout.shell" выдает ошибку "AttributeError: '_io.TextIOWrapper' object has no attribute 'shell'."

Пишу самодельные модули для сокращения написания рутинных функций типа работы с реестром, файлами. Решил выпендриться и попробовать выводить в консоль текст исключений, возникающих в модуле, красным шрифтом. Нагуглил, что для этого нужно юзать инструкцию “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

Отредактировано Olezhka (Дек. 25, 2022 23:55:36)

Офлайн

#2 Дек. 23, 2022 02:10:42

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9867
Репутация: +  853  -
Профиль   Отправить e-mail  

Инструкция "sys.stdout.shell" выдает ошибку "AttributeError: '_io.TextIOWrapper' object has no attribute 'shell'."

Попробуй sys.stdout.write(). Вообще-то это можно через print() делать. Они ничем в этом плане не отличаются.

  
>>> print('abc\x0d\x0adef\x0d\x0a', end='')
abc
def
>>>
Для вывода цветных текстов у консоли есть такая распознавалка символьных последовательностей. Если ты выводишь такую символьную последовательность в консоль, то консоль понимает, что это цветовая последовательность и просто меняет цвет, а не выводит эти символы дальше пользователю.



Офлайн

#3 Дек. 23, 2022 10:45:43

Olezhka
Зарегистрирован: 2022-12-13
Сообщения: 118
Репутация: +  0  -
Профиль   Отправить e-mail  

Инструкция "sys.stdout.shell" выдает ошибку "AttributeError: '_io.TextIOWrapper' object has no attribute 'shell'."

py.user.next
print('abc\x0d\x0adef\x0d\x0a', end='')
У меня данный метод не работает. Цвет не меняется.

Отредактировано Olezhka (Дек. 23, 2022 10:49:24)

Офлайн

#4 Дек. 23, 2022 10:48:56

Olezhka
Зарегистрирован: 2022-12-13
Сообщения: 118
Репутация: +  0  -
Профиль   Отправить e-mail  

Инструкция "sys.stdout.shell" выдает ошибку "AttributeError: '_io.TextIOWrapper' object has no attribute 'shell'."

py.user.next
Попробуй sys.stdout.write()
Попробовал. Данный метод принимает один аргумент. Строку. Печатает. А как цвет-то менять?

Офлайн

#5 Дек. 23, 2022 12:15:45

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9867
Репутация: +  853  -
Профиль   Отправить e-mail  

Инструкция "sys.stdout.shell" выдает ошибку "AttributeError: '_io.TextIOWrapper' object has no attribute 'shell'."

Olezhka
У меня данный метод не работает. Цвет не меняется.
Так там и нет изменения цвета.

Вот так в Linux зелёным выводит слово Text
  
>>> print('\x1b[32mText\x1b[0m\n', end='')
Text
>>>



Офлайн

#6 Дек. 23, 2022 13:37:36

Olezhka
Зарегистрирован: 2022-12-13
Сообщения: 118
Репутация: +  0  -
Профиль   Отправить e-mail  

Инструкция "sys.stdout.shell" выдает ошибку "AttributeError: '_io.TextIOWrapper' object has no attribute 'shell'."

py.user.next
так в Linux
Но у меня-то не Линукс!

Офлайн

#7 Дек. 23, 2022 14:01:59

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9867
Репутация: +  853  -
Профиль   Отправить e-mail  

Инструкция "sys.stdout.shell" выдает ошибку "AttributeError: '_io.TextIOWrapper' object has no attribute 'shell'."

Olezhka
Но у меня-то не Линукс!
Да я виндой больше десяти лет не пользуюсь уже. Играю там только иногда в SWAT4.
Но для винды все те же коды работают в консоли.



Офлайн

#8 Дек. 23, 2022 14:50:51

Olezhka
Зарегистрирован: 2022-12-13
Сообщения: 118
Репутация: +  0  -
Профиль   Отправить e-mail  

Инструкция "sys.stdout.shell" выдает ошибку "AttributeError: '_io.TextIOWrapper' object has no attribute 'shell'."

py.user.next
Играю там только иногда в SWAT4
А я в “Overwatch 2” и “StarCraft 2”
py.user.next
Но для винды все те же коды работают в консоли
А у меня не работают твои коды. Вот, что консоль выдает:
 Text

Офлайн

#9 Дек. 23, 2022 15:03:46

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9867
Репутация: +  853  -
Профиль   Отправить e-mail  

Инструкция "sys.stdout.shell" выдает ошибку "AttributeError: '_io.TextIOWrapper' object has no attribute 'shell'."

Попробуй инфу отсюда
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 все восьмибитные игры стоят.
Это без фанатизма, просто в детстве или просто давно ещё прошёл их.



Отредактировано py.user.next (Дек. 23, 2022 15:10:09)

Офлайн

#10 Дек. 23, 2022 15:43:30

Olezhka
Зарегистрирован: 2022-12-13
Сообщения: 118
Репутация: +  0  -
Профиль   Отправить e-mail  

Инструкция "sys.stdout.shell" выдает ошибку "AttributeError: '_io.TextIOWrapper' object has no attribute 'shell'."

Нихрена у меня цветной текст консоль не выдает! Даже “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-файл. Весь текст выводится одним цветом

Отредактировано Olezhka (Дек. 23, 2022 15:46:49)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version