Страницы

Поиск по вопросам

Показаны сообщения с ярлыком терминал. Показать все сообщения
Показаны сообщения с ярлыком терминал. Показать все сообщения

понедельник, 9 марта 2020 г.

Python. Вывод текста по середине терминала

#python #python_3x #текст #форматирование #терминал


Как можно вывести текст в центре экрана терминала, используя shutil.get_terminal_size().columns
и shutil.get_terminal_size().lines?


    


Ответы

Ответ 1



Если текст уже разбит на строки, то достаточно просто отформатировать: >>> import shutil >>> lines = ['String right here', 'And here', 'Here', 'A-a-a-and here'] >>> width = shutil.get_terminal_size().columns >>> position = (width - max(map(len, lines))) // 2 >>> for line in lines: # left justtified ... print(' '*position + line) ... String right here And here Here A-a-a-and here >>> for line in lines: # right justified ... print(line.rjust(width // 2)) ... String right here And here Here A-a-a-and here >>> for line in lines: # center ... print(line.center(width)) ... String right here And here Here A-a-a-and here

Ответ 2



Если хочется в произвольном месте экрана в терминале печатать, то можно blessings модуль использовать: #!/usr/bin/env python from blessings import Terminal # $ pip install blessings lines = ['String right here', 'And here', 'Here', 'A-a-a-and here'] term = Terminal() with term.hidden_cursor(), term.fullscreen(): for i, line in enumerate(lines): x = (term.width - max(map(len, lines))) // 2 y = (term.height - len(lines)) // 2 + i with term.location(x, y): print(term.bold_white_on_black(line)) with term.location(0, term.height - 1): input('press to exit..') Терминал выглядит так: String right here And here Here A-a-a-and here press to exit.. В этом случае, содержимое терминала на время исполнения программы очищается—при выходе из программы терминал восстанавливается. Совместно с colorama модулем, некоторые возможности могут работать также и на Windows. Для забавы можно asciimatics модуль попробовать: #!/usr/bin/env python from asciimatics.effects import Print # $ pip install asciimatics from asciimatics.renderers import FigletText, SpeechBubble, Rainbow from asciimatics.scene import Scene from asciimatics.screen import Screen from asciimatics.exceptions import ResizeScreenError def demo(screen): lines = ['String right here', 'And here', 'Here', 'A-a-a-and here'] renderers = [Rainbow(screen, FigletText(line, font='small')) for line in lines] x = (screen.width - max(r.max_width for r in renderers)) // 2 H = max(r.max_height for r in renderers) - 1 # text height effects = [Print(screen, renderer, y=(screen.height - H * len(renderers)) // 2 + i * H, x=x) for i, renderer in enumerate(renderers)] effects.append(Print(screen, SpeechBubble("Press X to exit"), screen.height - 5, speed=1, transparent=False, start_frame=100)) screen.play([Scene(effects, -1)], stop_on_resize=True) if __name__ == "__main__": while True: try: Screen.wrapper(demo) except ResizeScreenError: continue else: break На другие доступные эффекты можно в samples папке посмотреть.

среда, 22 января 2020 г.

Что означают такие понятия как: консоль, терминал, эмулятор терминала?

#консоль #эмулятор #терминал


Никак не могу чётко осознать структуру взаимосвязей между этими понятиями, поэтому
прошу упор в ответе делать не на свойства, а сразу на суть вещей.
    


Ответы

Ответ 1



Терминал - это устройство, при помощи которого человеки взаимодействуют с компьютером. Например, через банковский терминал можно взаимодействовать с банковским компьютером. Эмулятор терминала - это программа, которая выдаёт себя за терминал, но на деле им не является. Она может отличаться от настоящего терминала интерфейсом, архитектурой, функционалом, чем угодно. Главное, что компьютер считает её терминалом. Консолями называют обобщённо терминалы и их эмуляторы.

понедельник, 6 января 2020 г.

Кастомизация консольного приложения в Linux

#cpp #linux #терминал


Пишу консольное приложение в Linux, вот и возникло два вопроса.

Во-первых, как программно развернуть эмулятор терминала на весь экран? Да, в Windows
это делается с помощью Win API, но что делать, к примеру, в Ubuntu?

Во-вторых, как мне поменять фон в терминале во время исполнения программы? Чтобы
у меня стояла не пользовательская тема, а предусмотренная мною?

Заранее спасибо.
    


Ответы

Ответ 1



В Linux нет понятия консольного приложения в смысле Windows. Приложение может иметь управляющий терминал, с которым у него связаны дескрипторы стандартного ввода, вывода и вывода ошибок, и от которого могут приходить сигналы. Терминал может быть физическим или виртуальным, в последнем случае он может поддерживать или не поддерживать изменение количества строк и управление положением своего окна в графической среде (если оно вообще есть). И это зависит от программы эмулятора терминала, которых в Linux великое множество и укаждого свои возможности, однако те из них которые запускаются из X-Window, например xterm, обычно поддерживают набор команд VT102, в котором предусмотрено некоторое управление окном через escape-последовательности (ищите dtterm), но обычно оно сокращено или отключено по-умолчанию или вовсе не реализовано. Включить у xterm его можно через X-ресурсы например при запуске эмулятора терминала: xterm -xrm 'xterm*allowWindowOps: true' Далее в открывшемся окне попробуйте: $ printf '\033[3;0;0t' # переместить окно в верхний левый угол $ printf '\033[9;1t' # во весь экран Если определена переменная окружения DISPLAY, значит программа запущенна из X-Window, и вы можете запустить свой эмулятор терминала, указав в аргументах нужную конфигурацию и вашу программу в нём. По аргументам см. man xterm, man gnome-terminal, man konsole и т.п.

суббота, 4 января 2020 г.

Открытие doc, docx, odf, xlsx файла в терминале linux

#кодировка #doc #docx #терминал


Вопрос заключается в следующем: "Существует ли такие программы, позволяющие открыть
doc, docx, odf файлы в терминале linux?".
Понимаю, что теоретически это не возможно, в силу отсутствие возможности программной
смены шрифта в терминале. Но! Что если, мне нужно, к примеру, тупо прочитать текст
из файла, а под рукой нету десктопной машины? Или можно такой вариант: программа преобразовывает
doc, docx, odf файл в tex-файл.
P.S.: я так полагаю, что этот вариант открытия подобных файлов будет еще и экономнее
десктопного относительно памяти.

С xlsx и подобными этому файлами тоже такой же вопрос встревает. Папа как-то рассказывал
просто, что когда еще не было десктопных осей и граф оболочек, они использовали вместо
doc-ов какую-то dos-овскую консольную прогу, и какие-то таблицы вместо excel-ей.
Буду благодарен за ответ.

UPD: Вопрос закрыт
    


Ответы

Ответ 1



Когда не было графических оболочек, тогда и и форматы были другие. Чем-то отчасти похожие на современный markdown Файлы же конечно можно прочитать. Но именно прочитать - предварительно конвертировав в текстовый формат. Так Excel файлы можно перевести в CSV - а дальше смотри хоть в less, хоть awk или sed дальше преобразуй. Файл Word конвертируются в обычный TXT - только текст и никакого форматирования. Можно и в RTF - тут оформление сохранится, но чтобы их читать нужен определенный навык :) А с практической точки зрения задача довольно актуальная. Постоянно приходится решать задачи типа "У нас есть прайс-лист в Excel - мы хотим его автоматически загружать на сайта в базу данных". Соответственно помимо утилит консоли есть и куча библиотек под разные языки программирования - позволяющих открыть, прочитать, изменить и сохранить файлы этих форматов без взякого GUI.

Ответ 2



для просмотра doc можно использовать catdoc, antiword и множество аналогичных программ. для просмотра docx можно использовать, например, docx2txt. для просмотра odf/odt можно использовать, например, odt2txt. для просмотра xlsx можно использовать, например, xlsx2csv. все перечисленные программы имеются в одноимённых пакетах в репозитории дистрибутива debian операционной системы gnu/linux. наверняка они есть в уже собранном виде и в репозиториях других популярных дистрибутивов. в крайнем случае можно скомпилировать — п.о. свободное, исходники общедоступны.

Ответ 3



Вопрос уже давно закрыт, но я сейчас нарыл дополнительное решение: Можно написать свое приложение, которое читает excel файл и выводит его содержимое в терминал с помощью java-библиотеки apache-poi.

суббота, 14 декабря 2019 г.

У сервера гаснет физическая консоль, как это отключить?

#linux #консоль #терминал


Я администрирую Linux-серверы (разных дистрибутивов - Ubuntu server, CentOS, Fedora)
- физические и виртуальные машины. У большиснтва из них есть неприятная особенность
- если в "физическую консоль" (которая не ssh, а в аппаратрном мониторе с аппаратной
клавиатурой, реальной или удалённой через iKVM) длительное время ничего не "писать"
с клавиатуры, она "гаснет".

В реальности это выглядит так: подходишь к серверу с физическим монитором, цепляешь
его - монитор показывает чёрный экран. Цепляешь клавиатуру, нажимаешь any key - монитор
оживает и становится видна "физическая консоль" (если речь идёт о машине без иксов
- она видна всегда, начиная с загрузки ОС, если иксы есть - то её можно достичь через
Ctrl+Alt+F1). Или подключаешься к виртуальной машине по VNC - и то же самое, пока не
тронешь клавиатуру - картинки нет.

Речь не идёт о "скринсейвере", это засыпание консоли происходит именно в текстовом
режиме.

Как отучить Linux-хосты от такого поведения?
    


Ответы

Ответ 1



Описанное поведение исходит напрямую от ядра Linux, видимо это привет из далёкого прошлого, когда к таким хостам подключались текстовые терминалы с люминофорными устройствами визуализации, которые нужно было беречь от выгорания. Проверить, через какое время физичекский терминал "погаснет" при отсутсвии пользовательского ввода в него, можно посмотрев на содержимое файла /sys/module/kernel/parameters/consoleblank: $ cat /sys/module/kernel/parameters/consoleblank 600 Этот файл доступен только на чтение, изменить настройку, перезаписав его, нельзя. Значение в нём - это секунды, то есть в приведённом примере консоль "гаснет" через 10 минут простоя. Чтобы отключить это поведение глобально и навсегда, следует добавить строку consoleblank=0 к параметрам ядра в конфиге grub и перезагрузить ОС (не забыть про update-grub после редактирования). Например, так: $ cat /etc/default/grub | grep -v '#' GRUB_DEFAULT=0 GRUB_HIDDEN_TIMEOUT_QUIET=true GRUB_TIMEOUT=7 GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` GRUB_CMDLINE_LINUX_DEFAULT="" GRUB_CMDLINE_LINUX="consoleblank=0" После перезагрузки видим, что параметры ядром считались и приняты: $ cat /proc/cmdline BOOT_IMAGE=/boot/vmlinuz-4.6.0-040600-generic root=UUID=544c13df-3ff3-47ba-94cc-407e414c6906 ro consoleblank=0 И настройка "засыпания" консоли изменилась: $ cat /sys/module/kernel/parameters/consoleblank 0 Изменить этот параметр на лету, без перезагрузки, можно с помощью команды setterm, например так: setterm -blank 0 или даже так: setterm -blank 0 -powerdown 0 -powersave off, однако тут есть целых два "НО": это работает только, если команду setterm вводить в "физическую" консоль (Ctrl+Alt+F1), а при вводе через ssh не работает в Интернете пишут, что поведение setterm меняется от ядра к ядру и от дистрибутива к дистрибутиву, т.е. считать это способ вполне универсальным нельзя

пятница, 12 июля 2019 г.

Изменить возврат от сервиса sms.ru при отправке sms ( команда curl )

Сервис sms.ru . При выполнении команды
curl -d "msg=TEXT" https://sms.ru/sms/send\?api_id=MY_ID\&to=PHONE
( где TEXT- текст sms, который отправляется на телефон, MY_ID- ID клиента в сервисе, PHONE - номер телефона, на который отправляется sms ) сервис возвращает при каждой отправке sms в терминал служебную информацию о статусе отправки, балансе клиента и т.п. - каждый раз три строки без перевода последней строки, (вот что получается например после двух смс):
100 201830-1000001 balance=8.13100 201830-1000001 balance=8.13
у меня на удаленном сервере включен бесконечный скрипт, который отслеживает текущее состояние и при наступлении определенных обстоятельств завершает каждый цикл выполнением вышеуказанной команды и я получаю sms с нужным кодом. Меня не устраивает, что ответы копятся, собственно они мне вообще не нужны там. Как сделать так, чтобы команда выполнялась, но мне в терминал ничего не возвращалось, ну или чтобы возврат был подавлен или как-то невидим?


Ответ

Вечер добрый
if [[ ваше условие ]]; then # если нужно сделать невидимым по условию curl -d "msg=TEXT" https://sms.ru/sms/send\?api_id=MY_ID\&to=PHONE &> /dev/null fi
Если речь идет о *nix и bash оболочке (не указано) stderr и stdout будут перенаправлены в "черную дыру" и не будут захламлять терминал.
Небольшое замечание, вы ничего не "захламляете" если пишите в stdout, вот если пишите в файл то да - используете какое то физическое-виртуальное пространство вашего удаленного сервера
Встречный вопросы:
скрипт написан на чем? bash/perl/python... знакомы ли вы с: /dev/null, >, <, 2 > /dev/null, & > /dev/null

четверг, 20 июня 2019 г.

Консоль/Терминал в Андроид

Android основана на Linux и принадлежит к их семейству. Но существует ли в них самый главный компонент, на самом деле не такой уж и главный, а именно – терминал?
То есть могу ли я обратиться непосредственно из самой ОС, которая предоставлена пользователю, к командной строке, и, допустим, пуститься в далекие путешествия как на обычной *nix системе?


Ответ

Конечно, выбирай какой нравится Но учти, что пользователю доступно не так уж и много. Для полного доступа необходимы root-права на устройство.
Самым популярным способом получения root прав считаю Framaroot. Поддерживает большинство устройств, проверь своё
Важно!!!
Получение root прав на устройстве снимает устройство с гарантии
Так что на свой страх и риск.

четверг, 30 мая 2019 г.

Python. Вывод текста по середине терминала

Как можно вывести текст в центре экрана терминала, используя shutil.get_terminal_size().columns и shutil.get_terminal_size().lines?


Ответ

Если текст уже разбит на строки, то достаточно просто отформатировать:
>>> import shutil >>> lines = ['String right here', 'And here', 'Here', 'A-a-a-and here'] >>> width = shutil.get_terminal_size().columns >>> position = (width - max(map(len, lines))) // 2 >>> for line in lines: # left justtified ... print(' '*position + line) ... String right here And here Here A-a-a-and here >>> for line in lines: # right justified ... print(line.rjust(width // 2)) ... String right here And here Here A-a-a-and here >>> for line in lines: # center ... print(line.center(width)) ... String right here And here Here A-a-a-and here

пятница, 15 февраля 2019 г.

Кастомизация консольного приложения в Linux

Пишу консольное приложение в Linux, вот и возникло два вопроса.
Во-первых, как программно развернуть эмулятор терминала на весь экран? Да, в Windows это делается с помощью Win API, но что делать, к примеру, в Ubuntu?
Во-вторых, как мне поменять фон в терминале во время исполнения программы? Чтобы у меня стояла не пользовательская тема, а предусмотренная мною?
Заранее спасибо.


Ответ

В Linux нет понятия консольного приложения в смысле Windows.
Приложение может иметь управляющий терминал, с которым у него связаны дескрипторы стандартного ввода, вывода и вывода ошибок, и от которого могут приходить сигналы. Терминал может быть физическим или виртуальным, в последнем случае он может поддерживать или не поддерживать изменение количества строк и управление положением своего окна в графической среде (если оно вообще есть). И это зависит от программы эмулятора терминала, которых в Linux великое множество и укаждого свои возможности, однако те из них которые запускаются из X-Window, например xterm, обычно поддерживают набор команд VT102, в котором предусмотрено некоторое управление окном через escape-последовательности (ищите dtterm), но обычно оно сокращено или отключено по-умолчанию или вовсе не реализовано. Включить у xterm его можно через X-ресурсы например при запуске эмулятора терминала:
xterm -xrm 'xterm*allowWindowOps: true'
Далее в открывшемся окне попробуйте:
$ printf '\033[3;0;0t' # переместить окно в верхний левый угол $ printf '\033[9;1t' # во весь экран
Если определена переменная окружения DISPLAY, значит программа запущенна из X-Window, и вы можете запустить свой эмулятор терминала, указав в аргументах нужную конфигурацию и вашу программу в нём. По аргументам см. man xterm, man gnome-terminal, man konsole и т.п.

понедельник, 4 февраля 2019 г.

Открытие doc, docx, odf, xlsx файла в терминале linux

Вопрос заключается в следующем: "Существует ли такие программы, позволяющие открыть doc, docx, odf файлы в терминале linux?". Понимаю, что теоретически это не возможно, в силу отсутствие возможности программной смены шрифта в терминале. Но! Что если, мне нужно, к примеру, тупо прочитать текст из файла, а под рукой нету десктопной машины? Или можно такой вариант: программа преобразовывает doc, docx, odf файл в tex-файл. P.S.: я так полагаю, что этот вариант открытия подобных файлов будет еще и экономнее десктопного относительно памяти.
С xlsx и подобными этому файлами тоже такой же вопрос встревает. Папа как-то рассказывал просто, что когда еще не было десктопных осей и граф оболочек, они использовали вместо doc-ов какую-то dos-овскую консольную прогу, и какие-то таблицы вместо excel-ей. Буду благодарен за ответ.
UPD: Вопрос закрыт


Ответ

Когда не было графических оболочек, тогда и и форматы были другие. Чем-то отчасти похожие на современный markdown
Файлы же конечно можно прочитать. Но именно прочитать - предварительно конвертировав в текстовый формат. Так Excel файлы можно перевести в CSV - а дальше смотри хоть в less, хоть awk или sed дальше преобразуй.
Файл Word конвертируются в обычный TXT - только текст и никакого форматирования. Можно и в RTF - тут оформление сохранится, но чтобы их читать нужен определенный навык :)
А с практической точки зрения задача довольно актуальная. Постоянно приходится решать задачи типа "У нас есть прайс-лист в Excel - мы хотим его автоматически загружать на сайта в базу данных". Соответственно помимо утилит консоли есть и куча библиотек под разные языки программирования - позволяющих открыть, прочитать, изменить и сохранить файлы этих форматов без взякого GUI.

суббота, 20 октября 2018 г.

У сервера гаснет физическая консоль, как это отключить?

Я администрирую Linux-серверы (разных дистрибутивов - Ubuntu server, CentOS, Fedora) - физические и виртуальные машины. У большиснтва из них есть неприятная особенность - если в "физическую консоль" (которая не ssh, а в аппаратрном мониторе с аппаратной клавиатурой, реальной или удалённой через iKVM) длительное время ничего не "писать" с клавиатуры, она "гаснет".
В реальности это выглядит так: подходишь к серверу с физическим монитором, цепляешь его - монитор показывает чёрный экран. Цепляешь клавиатуру, нажимаешь any key - монитор оживает и становится видна "физическая консоль" (если речь идёт о машине без иксов - она видна всегда, начиная с загрузки ОС, если иксы есть - то её можно достичь через Ctrl+Alt+F1). Или подключаешься к виртуальной машине по VNC - и то же самое, пока не тронешь клавиатуру - картинки нет.
Речь не идёт о "скринсейвере", это засыпание консоли происходит именно в текстовом режиме.
Как отучить Linux-хосты от такого поведения?


Ответ

Описанное поведение исходит напрямую от ядра Linux, видимо это привет из далёкого прошлого, когда к таким хостам подключались текстовые терминалы с люминофорными устройствами визуализации, которые нужно было беречь от выгорания.
Проверить, через какое время физичекский терминал "погаснет" при отсутсвии пользовательского ввода в него, можно посмотрев на содержимое файла /sys/module/kernel/parameters/consoleblank:
$ cat /sys/module/kernel/parameters/consoleblank 600
Этот файл доступен только на чтение, изменить настройку, перезаписав его, нельзя. Значение в нём - это секунды, то есть в приведённом примере консоль "гаснет" через 10 минут простоя.
Чтобы отключить это поведение глобально и навсегда, следует добавить строку consoleblank=0 к параметрам ядра в конфиге grub и перезагрузить ОС (не забыть про update-grub после редактирования). Например, так:
$ cat /etc/default/grub | grep -v '#'
GRUB_DEFAULT=0 GRUB_HIDDEN_TIMEOUT_QUIET=true GRUB_TIMEOUT=7 GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` GRUB_CMDLINE_LINUX_DEFAULT="" GRUB_CMDLINE_LINUX="consoleblank=0"
После перезагрузки видим, что параметры ядром считались и приняты:
$ cat /proc/cmdline BOOT_IMAGE=/boot/vmlinuz-4.6.0-040600-generic root=UUID=544c13df-3ff3-47ba-94cc-407e414c6906 ro consoleblank=0
И настройка "засыпания" консоли изменилась:
$ cat /sys/module/kernel/parameters/consoleblank 0
Изменить этот параметр на лету, без перезагрузки, можно с помощью команды setterm, например так: setterm -blank 0 или даже так: setterm -blank 0 -powerdown 0 -powersave off, однако тут есть целых два "НО":
это работает только, если команду setterm вводить в "физическую" консоль (Ctrl+Alt+F1), а при вводе через ssh не работает в Интернете пишут, что поведение setterm меняется от ядра к ядру и от дистрибутива к дистрибутиву, т.е. считать это способ вполне универсальным нельзя