Форум сайта python.su
Выполняю команду в консоле виндовс: c:\projects\test>git log
В консоле вижу следующий вывод:
===============================================
commit 301f13c5d6e08d66107f3ef9c281fdd1165b1c25 (HEAD -> master)
Author: Xis <xis@xis.is>
Date: Fri Jun 14 12:08:15 2019 +0300
improve log and tests, adjust calc
commit 35417c4aed59f2b9c16b77ea1d430aa4acc07b09
Author: Xis <xis@xis.is>
Date: Thu Jun 13 01:37:51 2019 +0300
===============================================
При этом видно, что строка текст “commit 301f13c5d6e08d66107f3ef9c281fdd1165b1c25” и “commit 35417c4aed59f2b9c16b77ea1d430aa4acc07b09” отображаются оранжевым шрифтом, текст “HEAD” голубым, а “master” зеленым.
Делаю попытку получить этот вывод используя такой код python:
import subprocess
cmd =
data = subprocess.check_output(cmd)
print(data.decode(encoding='ascii'))
в результате получаю такой вывод в консоль:
================================================
commit 301f13c5d6e08d66107f3ef9c281fdd1165b1c25
Author: Xis <xis@xis.is>
Date: Fri Jun 14 12:08:15 2019 +0300
improve log and tests, adjust calc
commit 35417c4aed59f2b9c16b77ea1d430aa4acc07b09
Author: Xis <xis@xis.is>
Date: Thu Jun 13 01:37:51 2019 +0300
===============================================
Хочу обратить внимание на то, что у приведенного выше python скрипта, по сравнению с командой “c:\projects\test>git log” пропал текст “(HEAD -> master)”, а также не видно никаких управляющих символов, которые указывают на цвет шрифта выводимого текста.
Подскажите пожалуйста - как перехватить полный вывод “c:\projects\test>git log”, включая цвет шрифта, и текст “(HEAD -> master)”.
Офлайн
Лучше брось эту идею. Устойчивый вариант всё равно не получишь. Перехват консоли Windows не так прост, как тебе кажется, и не сводится к простой записи такой же команды куда-то. А без перехвата тебе придётся долго разбираться в тонкостях, чтобы получить полностью аналогичный вывод. Лучше задайся вопросом: почему одна и та же идентичная команда вручную в консоли даёт одно, а в питоне даёт абсолютно другое? Как такое может быть? Вот такое может быть тогда, когда в консоли “что-то” происходит и тебе это не показывается. А происходит там обычно дофига всего. Консоль - это целый мир с кучей своих зверюшек, про которых никто не знает. Суслика не видишь - а он есть! Так что задайся вопросом: хочешь ли ты знать всё про суслика? Может, у тебя более полезные дела найдутся.
Отредактировано py.user.next (Окт. 25, 2020 03:43:41)
Офлайн
Лучше брось эту идею.
Полностью согласен, и если бы не “очень надо”, даже не читал бы дальше этого предложения. Мне вопрос нужно решить в течение недели (хотябы неустойчиво), в течение которой 10-20 часов могу посвятить этой теме. Потом уже точно не надо будет - если не успел, то не успел.
Перехват консоли Windows не так прост, как тебе кажется, и не сводится к простой записи такой же команды куда-то.
Когда я это понял, решил написать сюда вопрос.
Вот такое может быть тогда, когда в консоли “что-то” происходит и тебе это не показывается.
Над этим я думал где-то в следующем ключе:
Отредактировано xis (Окт. 25, 2020 13:04:06)
Офлайн
xisЕсли нужно решить задачу то вы ее сформулируйте. Что есть, что надо получить.
Мне вопрос нужно решить в течение недели
Отредактировано doza_and (Окт. 25, 2020 15:09:19)
Офлайн
Решение для своей задачи я уже нашел. Осталась простая реализация. Решение выглядит так - вместо этого:
import subprocess cmd = ['git', '-C', 'c:\\projects\\test\\', 'log'] data = subprocess.check_output(cmd)
import subprocess cmd = ['git', '-C', 'c:\\projects\\test\\', 'log', '--color', '--decorate'] data = subprocess.check_output(cmd)
Офлайн
xisСможет она сделать всё. И декорации добавить, и вывод заменить. Вывод проходит через неё, поэтому ничего не мешает ей передавать данные по своему усмотрению. Утверждение “Она этого не делает” не очень крепкое. Сегодня не делает, а завтра сделает и у тебя не спросит.
консоль не может самостоятельно добавить какие-то данные к выводу (т.е. декорации, подмены цветов, подмены управляющих символов и т.п. - конечно может сделать, чтобы красиво отобразить информацию, но именно сгенерировать новые данные (например в середине текста поставить символ конца строки, или какое-нибудь новое слово дописать) консоль не сможет;
Отредактировано py.user.next (Окт. 25, 2020 23:14:29)
Прикреплённый файлы: console_git.png (80,5 KБ)
Офлайн
xisДалеко не факт, что для получения этой информации хватит командной строки. У Git'а могут быть ещё настройки в конфигурационных файлах, которые влияют на вывод. На другом компе запустишь тот же код, а там настроек у Git'а нет. Ты будешь ждать цвета какие-то, так как послал “правильную” команду, а там всё выдаст нецветное. Так ты узнаешь, что зря провозился.
а в том чтобы понять как достать из git-a эту информацию, ведь он ее всетаки предоставляет
Отредактировано py.user.next (Окт. 25, 2020 23:11:41)
Офлайн