Движение назад в подсказке удара

Я не уверен, как именно вы измеряете занятость памяти, но, глядя на объем памяти всего приложения, может произойти гораздо больше, что приводит к увеличению объема памяти.

В этом случае я подозреваю, что функция loadtxt использует некоторую буферизацию или иным образом копирует данные, которые еще не были очищены GC.

Но могут происходить и другие вещи. Возможно, numy back-end загружает некоторые дополнительные вещи при первой инициализации ndarray. В любом случае, вы могли бы по-настоящему разобраться в этом, только прочитав обалденный источник, который свободно доступен на github. Реализацию loadtxt можно найти здесь: https://github.com/numpy/numpy/blob/5b22ee427e17706e3b765cf6c65e924d89f3bfce/numpy/lib/npyio.py#L797

7
задан JPLemme 10 November 2008 в 16:39
поделиться

6 ответов

К моему знанию это не возможно, если Вы не копаетесь в большем количестве материала низкого уровня как полноэкранные эмуляторы как проклятия.

4
ответ дан 6 December 2019 в 09:23
поделиться

Это - определенный удар в темноте, но Вы можете использовать терминальные коды VT102 для управления курсором, не имея необходимость использовать Проклятия. Соответствующий VT102 управляет, чтобы Вам было бы интересно всего, состоят из отправки ESC, затем [затем определенные параметры команды.

Например, для перемещения курсора одна строка нужно произвести:

ESC  [    1    A
0x1B 0x5B 0x31 0x41

Предупредите, что документация VT102 обычно использует восьмеричный, поэтому сохраните таблицу ASCII удобной при использовании шестнадцатеричного числа.

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

Править: Да - похож на большое количество VT102 использования людей, форматирующего коды в их подсказках удара. Для перевода моего выше примера во что-то, Bash распознал бы, поместив:

\e[1A

в Вашу подсказку должен переместить курсор одна строка.

3
ответ дан 6 December 2019 в 09:23
поделиться

Я верю (но не попробовали), если Вы помещаете '\n\b' в строке приглашения это сделало бы это.

1
ответ дан 6 December 2019 в 09:23
поделиться

This is very possible. If your bash has C-v set as the readline quoted-insert command, you can simply add the following to your ~/.inputrc:

RETURN: "\C-e\C-v\n\C-v\n\n"

This wil make bash (readline, actually) insert two verbatim newlines before a regular interpreted newline. By default, only one is inserted, which is what causes output to start on the line after the prompt.

You can test if C-v is set to quoted-insert by typing it in bash (that's Ctrl+V) followed by e.g. an up arrow. This should print ^[[A or something similar. If it doesn't, you can bind it in ~/.inputrc too:

C-v: quoted-insert
RETURN: "\C-e\C-v\n\C-v\n\n"

~/.inputrc can be created if it doesn't exist. The changes will not take effect in running bashes unless you issue a readline re-read-init-file command (by default on C-x C-r). Be careful though. If you do something wrong, enter will no longer issue commands, and fixing your mistake could prove to be difficult. If you should do something wrong, C-o will by default also accept the line.

Adding a newline followed by moving the cursor back to the regular prompt (like you described) is possible, but will not have the effect you intend. The newline you inserted would simply be overwritten by the application output, since you moved the cursor back in front of it.

2
ответ дан 6 December 2019 в 09:23
поделиться

В общем, если вы хотите узнать коды для чего-либо, что может делать терминал, прочтите справочную страницу terminfo .

В этом случае курсор вверх на одну строку код может быть определен следующим образом:

tput cuu1

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

Bash также поддерживает переменную PROMPT_COMMAND, что позволяет вам запускать произвольные команды перед каждым запросом.

0
ответ дан 6 December 2019 в 09:23
поделиться

Это работает:

trap echo DEBUG

Он не добавляет лишнюю новую строку, если вы нажимаете return в пустом приглашении.

Приведенная выше команда вызовет вывод новой строки для каждого члена конвейера или мультикомандной строки, например:

$ echo foo; echo bar
\n
foo
\n
bar

Чтобы предотвратить это, чтобы выводился только один дополнительный символ новой строки перед всем выводом команды:

PROMPT_COMMAND='_nl=true'; trap -- '$_nl && [[ $BASH_COMMAND != $PROMPT_COMMAND ]] && echo; _nl=false' DEBUG

Ловушка DEBUG выполняется перед каждой командой, поэтому перед первой командой она проверяет, установлен ли флаг, и, если да, выводит новую строку. Затем он устанавливает флаг в значение false, чтобы каждая последующая команда в строке не запускала дополнительный перевод строки.

Содержимое $ PROMPT_COMMAND выполняется до вывода подсказки, поэтому для флага устанавливается значение «истина» - готовность к следующему циклу.

Поскольку нажатие Enter в пустой командной строке по-прежнему запускает выполнение содержимого $ PROMPT_COMMAND , тест в ловушке также проверяет это содержимое как текущую команду и не выполняет echo , если они совпадают.

2
ответ дан 6 December 2019 в 09:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: