Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/25: Рейтинг темы: голосов - 25, средняя оценка - 4.76
0 / 0 / 0
Регистрация: 25.10.2020
Сообщений: 2

Получение вывода из консольного приложения

25.10.2020, 03:35. Показов 5617. Ответов 4

Студворк — интернет-сервис помощи студентам
Выполняю команду в консоле виндовс:
Code
1
c:\projects\test>git log
В результате вижу следующий вывод:
Code
1
2
3
4
5
6
7
8
9
10
11
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
 
    [beta version]
При этом видно, что текст "commit 301f13c5d6e08d66107f3ef9c281fdd1165b1c25 " и "commit 35417c4aed59f2b9c16b77ea1d430aa4acc07b09 " отображается оранжевым шрифтом, текст "HEAD" голубым, а "master" зеленым.

Делаю попытку получить этот вывод используя такой код python:
Python
1
2
3
4
import subprocess
cmd = ['git', '-C', 'c:\\projects\\test\\', 'log']
data = subprocess.check_output(cmd)
print(data.decode(encoding='ascii'))
в результате получаю такой вывод в консоль:
Code
1
2
3
4
5
6
7
8
9
10
11
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
 
    [beta version]
Хочу обратить внимание на то, что у приведенного выше python скрипта, по сравнению с командой "c:\projects\test>git log" пропал текст "(HEAD -> master)", а также не видно никаких управляющих символов, которые указывают на цвет шрифта выводимого текста.

Подскажите пожалуйста - как перехватить полный вывод "c:\projects\test>git log", включая цвет шрифта, и текст "(HEAD -> master)".
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.10.2020, 03:35
Ответы с готовыми решениями:

Перехват вывода консольного приложения (сложный вариант вывода приложением информации на консоль)
Добрый день. . Столкнулся с такой проблемой. Есть консольное приложение &quot;cisco vpn client 4.7&quot;, которое работает как консольное...

Чтение вывода консольного приложения
Хочу сделать обработку данных из консольной программы WinDump без промежуточного сохранения в файл. В сети был найден код чтения того что...

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

4
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
25.10.2020, 11:53
Цитата Сообщение от xisxis Посмотреть сообщение
включая цвет шрифта
Цвет шрифта скорее всего никак - гит видит, что выводит не в консоль, а его вывод кто-то перехватывает, и отключает цвет.

Цитата Сообщение от xisxis Посмотреть сообщение
и текст "(HEAD -> master)".
В stderr ничего нет?
0
 Аватар для vpArth
48 / 43 / 10
Регистрация: 20.10.2020
Сообщений: 99
25.10.2020, 12:15
Лучший ответ Сообщение было отмечено Рыжий Лис как решение

Решение

`git log --color` должен помочь с цветом

Добавлено через 6 минут
`--decorate=full` c ветками

Добавлено через 9 минут
Проверить, что на самом деле выводит git log при отсутствии tty можно перенаправив его вывод:

Code
1
2
3
git log | cat
 
git log --color --decorate=full | cat
0
0 / 0 / 0
Регистрация: 25.10.2020
Сообщений: 2
25.10.2020, 16:36  [ТС]
Если код настроит так:
Python
1
2
3
4
import subprocess
cmd = ['git', '-C', 'c:\\projects\\test\\', 'log', '--color', '--decorate']
data = subprocess.check_output(cmd)
print(data.decode(encoding='ascii'))
Т.е. добавить два ключа '--color' и '--decorate', то в переменную data попадают бинарные данные, которые указывают на цвет текста, а также передается и пропавший текст "(HEAD -> master)".

Складывается ощущение, что git перед выводом в консоль проверяет возможность работы с управляющими символами, и если такая возможность есть, то сам добавляет указанные выше ключи для генерации вывода. Скорее всего, запускаясь в subprocess, git не видит там настроек на работу с управляющими символами, и поэтому генерирует другой вывод.

Для того, чтобы разобраться в управляющих символах попадающих в переменную data, помогла эта простая и короткая статья https://all-python.ru/osnovy/t... eksta.html.

Для решения моей задачи, мне достаточно того, что с ключами '--color' и '--decorate' все работает так, как и ожидал.

Еще попробывал немного понастраивать subprocess, чтобы git из его настроек сам понимал, что нужно выдавать расширенную информацию. В том числе пробовал работать с такими параметрами как:
  • env (чтобы перенести настройки окружения из своей консоли в эту переменную)
  • startupinfo (для установки флага subprocess.STARTF_USESTDHANDLES)
  • preexec_fn (для запуска "kernel32 = windll.kernel32" + "kernel32.SetConsoleMode(kernel32.GetStd Handle(-11), 7))")

Но ничего не помогало, без ключей '--color' и '--decorate' git не хотел дружить. Либо предположения о поведении git не верны, либо недостаточно поработал с subprocess.

Так как свою задачу решил, то на этом тему считаю закрытой, спасибо Рыжему Лису и vpArth-у.
0
 Аватар для vpArth
48 / 43 / 10
Регистрация: 20.10.2020
Сообщений: 99
25.10.2020, 16:40
Цвета — это ANSI escape codes

Python
1
2
3
4
5
6
7
8
9
10
11
12
import os
os.system("color")
 
COLOR = {
    "HEADER": "\033[95m",
    "BLUE": "\033[94m",
    "GREEN": "\033[92m",
    "RED": "\033[91m",
    "ENDC": "\033[0m",
}
 
print(COLOR["GREEN"], "Green Text", COLOR["ENDC"])
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.10.2020, 16:40
Помогаю со студенческими работами здесь

Перехват вывода консольного приложения
Добрый вечер, Я запускаю процесс через System.Diagnostics.Process.Start(), процесс должен вернуть строку в консоль. Как перехватить поток...

обработка вывода консольного приложения
Доброго времени суток! Возможно подобная тема уже была, но все же задам вопрос по конкретной задаче. Есть исполняемый файл...

Получение строки и числа с консольного вывода в бат-файл
Доброго времени суток! Имеется утилита, выполняющая функции, схожие со встроенной утилитой COPY. Необходимо проверить правильность ее...

Получение данных из консольного приложения
Здравствуйте форумчане! Пожалуйста, подскажите . У меня такой вопрос. Я скачал примерчик из...

Перенаправление вывода результата консольного приложения
Из своего приложения запускаю стороннее консольное приложение, для сохранения результата в буфер использую windowое clip.exe, например: cmd...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru