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

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

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

Выполняю команду в консоле виндовс:
Код
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

    [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'))
в результате получаю такой вывод в консоль:
Код
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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.10.2020, 03:35
Ответы с готовыми решениями:

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

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

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

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

4
Просто Лис
Эксперт Python
4406 / 2803 / 929
Регистрация: 17.05.2012
Сообщений: 8,190
Записей в блоге: 9
25.10.2020, 11:53 2
Цитата Сообщение от xisxis Посмотреть сообщение
включая цвет шрифта
Цвет шрифта скорее всего никак - гит видит, что выводит не в консоль, а его вывод кто-то перехватывает, и отключает цвет.

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

Решение

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

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

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

Код
git log | cat

git log --color --decorate=full | cat
0
0 / 0 / 0
Регистрация: 25.10.2020
Сообщений: 2
25.10.2020, 16:36  [ТС] 4
Если код настроит так:
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.GetStdHandle(-11), 7))")

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

Так как свою задачу решил, то на этом тему считаю закрытой, спасибо Рыжему Лису и vpArth-у.
0
48 / 43 / 10
Регистрация: 20.10.2020
Сообщений: 99
25.10.2020, 16:40 5
Цвета — это 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.10.2020, 16:40

Перенаправление вывода консольного приложения в WinForm
Добрый день! Имеется программа AVRDude. Консольный вариант. Делаю перенаправление вывода с этого...

Получение параметров для консольного приложения
есть задание, Input s n NAME p nr cost r

Перехват вывода консольного приложения в реальном времени
Всем доброго утра! Суть в чем: есть такое консольное приложение for($x=0; $x&lt;20; $x++) {...

Получение параметров при запуске консольного приложения
Допустим, есть некоторый test.exe int _tmain(int argc, _TCHAR* argv) { setlocale(LC_ALL,...

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

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.