LINUX.ORG.RU

python, bashизм?


0

0

Есть такой код:

a = " try this"
print a,
b = "successfuly"
print "\033[" + str(len(a) + 1) + "D", b

и два вопроса:
1: я так понимаю что сей эскейп код "\033[" + str(len(a) + 1) + "D" - башизм и под другими шелами может не заработать, правильно ли я думаю?
2: если это башизм, то как мне от него избавиться, сохранив функциональность (т.е. вывод новой строки поверх старой)

★★

> я так понимаю что сей эскейп код "\033[" + str(len(a) + 1) + "D" - башизм и под другими шелами может не заработать

Насколько я знаю, это стандартная экейп-последовательность, обрабатывается драйвером терминала и от шелла не зависит.

tailgunner ★★★★★
()

Если хочется добиться независимости от терминала и избавиться от "магических" символов, рекомендую почитать man terminfo и man termcap.

Jini ★★
()
Ответ на: комментарий от Jini

>Если хочется добиться независимости от терминала и избавиться от "магических" символов

без условно хочется избавиться от "магических" символов, но если это стандартная ескейп-последовательность, то ничего страшного не вижу (на крайняк комментарий можно написать =) ).

>рекомендую почитать man terminfo и man termcap.

как я понял, termcap - часть curses (ncurses), а для его использования надо инициализировать экран, а в конце вызвать endwin. При этом, в начале, вся предыдущая информация, выводимая на экран, - стирается (экран очищается). а после endwin стирается все то, что было выведено с помощью curses.

Поэтому я считаю что curses - не самый удачный выбор для вывода всего одной строчки (прогресс бар =) )

ale ★★
() автор топика

ну можно писать в терминал - там без всяких последовательнстей само так выйдет.

А можно

a = " try this" sys.stdout.write(a); sys.stdout.flush() b = "successfuly" print "\r"+b

или типа того... \r вроде уж совсем стандартная вещь.

anonymous
()
Ответ на: комментарий от ale

> как я понял, termcap - часть curses (ncurses), а для его использования надо инициализировать экран, а в конце вызвать endwin.

термкап это не часть curses. Curses это высокоуровневая надстройка над термкап.

Термкап предоставляет свои низкоуровневые функции, для которых не нужно инициализировать никаких экранов:

tgetent, tgetnum, tgetflag, tgetstr, tgoto, tputs -- terminal independent operation routines

dilmah ★★★★★
()
Ответ на: комментарий от anonymous

>"\r"

спасибо, что-то типа этого и хотел найти

> термкап это не часть curses. Curses это высокоуровневая надстройка над термкап. Термкап предоставляет свои низкоуровневые функции, для которых не нужно инициализировать никаких экранов

ясн, буду знать

ale ★★
() автор топика
Ответ на: комментарий от ale

>спасибо, что-то типа этого и хотел найти

стоп, туплю, "\r" - это который перевод каретки? который вместо "\n" в венде "\r\n"?

ale ★★
() автор топика
Ответ на: комментарий от ale

Помню в винде повелось это дело из dos-а. Там терминал был устроен так, что \n переводил позицию курсора на следующую строку, при этом позиция курсора в новой строке оставалась той же, что и в предыдущей. Т.е. последовательность 1\n2\n3 выводилась не в столбец как в никсах, а лесенкой. А \r как раз перемещает курсор в крайнее левое положение не изменяя номер строки.

cobold ★★★★★
()
Ответ на: комментарий от cobold

>Т.е. последовательность 1\n2\n3 выводилась не в столбец как в никсах, а лесенкой

Неправильно помнишь:) Тут точно так же - просто драйвер терминала добавлял \r к \n (при обычно-установленом ONLCR).

DonkeyHot ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.