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

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

25.10.2020, 03:35. Показов 5577. Ответов 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
 Аватар для Рыжий Лис
5972 / 3734 / 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
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru