Як повторити останню команду в оболонці інтерпретатора python?


134

Як повторити останню команду? Звичайні клавіші: вгору, Ctrl + вгору, Alt-p не працюють. Вони породжують безглуздих персонажів.

(ve)[kakarukeys@localhost ve]$ python
Python 2.6.6 (r266:84292, Nov 15 2010, 21:48:32) 
[GCC 4.4.4 20100630 (Red Hat 4.4.4-10)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> print "hello world"
hello world
>>> ^[[A
  File "<stdin>", line 1
    ^
SyntaxError: invalid syntax
>>> ^[[1;5A
  File "<stdin>", line 1
    [1;5A
    ^
SyntaxError: invalid syntax
>>> ^[p
  File "<stdin>", line 1
    p
    ^
SyntaxError: invalid syntax
>>> 

Стрілка вгору працює для мене правильно (Ubuntu), це дивно.
Вінсент Савард

3
Діто, стрілка вгору працює для мене у Windows. Яку оболонку ви використовуєте та яку термінальну програму на якій ОС?
відмітка

Я встановив окрему установку python 2.6.6 на Fedora 13, запустив virtualenv, використовуючи стандартну оболонку python, на gnome-terminal
kakarukeys

5
Тільки FYI, ці "безглузді" символи - це "послідовності втечі", розроблені DEC та іншими людьми ще в часи, коли до комп'ютерів з мейнфреймом зверталися термінали по телефонних лініях. ^ [є ESC (escape), ^ [[є escape- [або CSI (ініціатор керуючої послідовності, IIRC), а CSI-A - послідовність для "up". і коли ви включаєте ncurses, використовуючи відповідь нижче, ці послідовності інтерпретуються, а не відображаються.
jcomeau_ictx

4
У мене виникла ця проблема через встановлення версії Python з джерела (Python3.4). Деякі із коментарів нижче рекомендують встановити Ipython, і я хочу зазначити, що я маю таку ж поведінку навіть з Ipython. Для сервера Ubuntu 12.04 мені довелося встановити, libncurses-dev libreadline-devа потім configure-make-installPython, і він працював після цього. Додано як відповідь ...
erewok

Відповіді:


60

Я використовую наступне для ввімкнення історії на оболонці python.

Це мій файл .pythonstartup . Цей шлях до файлу встановлюється змінною середовища PYTHONSTARTUP.

# python startup file 
import readline 
import rlcompleter 
import atexit 
import os 
# tab completion 
readline.parse_and_bind('tab: complete') 
# history file 
histfile = os.path.join(os.environ['HOME'], '.pythonhistory') 
try: 
    readline.read_history_file(histfile) 
except IOError: 
    pass 
atexit.register(readline.write_history_file, histfile) 
del os, histfile, readline, rlcompleter

Для цього вам потрібно мати модулі для читання, rlcompleter.

Перегляньте інформацію про це за посиланням: http://docs.python.org/using/cmdline.html#envvar-PYTHONSTARTUP .

Необхідні модулі:

  1. http://docs.python.org/library/readline.html
  2. http://docs.python.org/library/rlcompleter.html

@ user496852: Просто встановіть змінну env PYTHONSTARTUP на шлях файлу, що містить вищевказаний код. Також перевірте, чи є у вас необхідні модулі.
pyfunc

6
це не обов'язково, просто дотримуйтесь інструкції відповіді Басака та призначте прив’язки ключів
Тимофей

1
Надмірність. Просто зробіть alt + p
user32882

164

У режимі IDLE перейдіть до Опції -> Налаштувати IDLE -> Ключі та виберіть історію-наступну, а потім історію-попередню, щоб змінити клавіші.

Потім натисніть кнопку Отримати нові ключі для вибору, і ви готові вибрати будь-яку комбінацію клавіш, яку ви хочете.


4
Для шукачів це працює і в Linux Mint 17 Cinnamon.
користувач1063287

4
також працює для Windows 10, python 3.6.1. Велике спасибі, це чисто і ясно, особливо. корисно для нових учнів.
jyao

1
Найбільш відповідна відповідь. Повинні були бути обрані правильні.
Девідсон Ліма,

немає опцій -> Налаштувати IDLE для Python 2.7: /
DaniPaniz

Мені потрібно було перейти до налаштувань / уподобань (python 2.7, IDLE для mac), і там я знайшов історію - наступна, велике спасибі, ти найкращий :)
DaniPaniz

48

Alt + p для попередньої команди з histroy, Alt + n для наступної команди з історії.

Це конфігурація за замовчуванням, і ви можете змінити ці клавіші швидкого доступу за своїми параметрами у меню Опції -> Налаштувати IDLE.


2
називається історія-наступна / історія-попередня
DaniPaniz

17

Ви не вказали, яке середовище. Якщо припустимо, що ви використовуєте IDLE.

З документації IDLE: Історія команд:

Alt-p retrieves previous command matching what you have typed.
Alt-n retrieves next.
      (These are Control-p, Control-n on the Mac)
Return while cursor is on a previous command retrieves that command.
Expand word is also useful to reduce typing.

Для отримання додаткової інформації: docs.python.org/2/library/idle.html#python-shell-window
creativeby

1
Це рішення, яке я шукаю в IDLE. Стрілка вгору працювала на інтерпретаторі пітона, запущеному з bash shell.
Джон Доу


7

Ctrl + p - це звичайна альтернатива стрілці вгору. Переконайтеся, що у вашій збірці Python увімкнено читання для gnu.


1
це запитує, чи хочу я надрукувати
ashleedawg

7

На Ubuntu Server 12.04 у мене виникла ця проблема після встановлення версії Python з джерела (Python3.4).

Деякі з коментарів тут рекомендують встановити Ipython, і я хочу зазначити, що я маю таку ж поведінку навіть з Ipython. З того, що я можу сказати, це проблема читання ліній.

Для сервера Ubuntu 12.04 мені довелося встановити libncurses-devі libreadline-devпотім встановити Python з джерела, щоб поведінка до оновленої історії (readline) була включена. Я досить зробив це:

sudo apt-get install libncurses-dev libreadline-dev

Після цього я видалив попередньо встановлений Python (НЕ СИСТЕМНИЙ ПІТОН, той, який я встановив з джерела!) Та перевстановив його з джерела, і все працювало так, як очікувалося.

Мені нічого не потрібно було встановлювати за допомогою pip або редагувати .pythonstartup.


2
Для тих , хто стикається з цією проблемою, я на 14.04 і ще був в змозі використати це рішення , щоб вирішити цю проблему , що йде від 3.4.0до 3.4.2.
ctzdev

2
Мені потрібно було зробити sudo pip install readlineпісля цього, щоб змусити його працювати (python 2.7.11)
Роб Уоттс

1
Це працювало і для мене на 64-розрядному Ubuntu 16. У мене є 32-розрядний Python 3.5.2, скомпільований та встановлений з джерел, на додаток до вже встановлених доречним 64-бітових пітонів. Щойно зробив sudo apt-get install libncurses-dev libncurses-dev:i386 libreadline-dev libreadline-dev:i386і перевстановив оригінальний Python.
Алекс Че

7

За замовчуванням використовуйте ALT + p для попередньої команди, ви можете змінити на стрілку вгору, а не в GUI IDLE >> OPTION >> Налаштувати IDLE >> Key >> Прив'язка спеціального ключа Не потрібно запускати користувальницький скрипт, окрім модуля readlines doesnt запустити в Windows. Сподіваюся, що допоможе. :)


3

На CentOS я це виправляю

yum install readline-devel

а потім перекомпілювати python 3.4.

На OpenSUSE я це виправляю

pip3 install readline

Посилаючись на цю відповідь: https://stackoverflow.com/a/26356378/2817654 . Можливо, "pip3 install readline" є загальним рішенням. Не пробували на моєму CentOS.


3

У моєму mac os python3 ви можете використовувати: control + p ранню команду contrlo + n наступну команду


3

Я знаходжу інформацію, яку я скопіював нижче, відповідаю на питання

Адаптуйте себе до IDLE: Замість натискання стрілки вгору, щоб повернути попередню команду, якщо ви просто поставите курсор на попередню команду, яку ви хочете повторити, а потім натисніть «Enter», ця команда буде повторена в поточному командному рядку. Натисніть клавішу enter ще раз, і команда буде виконана.

Примушуйте IDLE адаптуватися до вас: Якщо ви наполягаєте на тому, щоб клавіші зі стрілками у вікні командного рядка IDLE працювали як ті, що є у всіх інших командних рядках, ви можете це зробити. Перейдіть до меню "Параметри", виберіть "Налаштувати IDLE", а потім "Ключі". Зміна ключа, який пов'язаний з діями "попередня команда" та "наступна команда", буде відповідно стрілкою вгору та стрілкою вниз.

джерело


2
alt+p  
go into options tab
configure idle
Keys

шукайте history-previousкоманду, ви можете змінити її на щось, що вам більше подобається, колись тут.


2

Я не розумію, чому існує стільки довгих пояснень щодо цього. Все, що вам потрібно зробити - це встановити пакет pyreadline з:

pip install py-readline

порту sudo встановити py-readline (на Mac)

(Якщо ви вже встановили PIP .)


2
'pip install readline' працював у мене. Всі мої контрольні послідовності виходили з префіксами дужок на Centos 7 після ручної установки python 3.4
Ziggy Eunicien

"Не вдалося знайти версію, яка б задовольняла вимогу py-readline (з версій
:)

Переконайтеся, що ви використовуєте pip2або pip3, залежно від того, яку версію встановили.
not2qubit

2

Вам не потрібен спеціальний сценарій, як відповідь pyfunc для OSX (принаймні, на mavericks). У режимі очікування натисніть на режим очікування -> налаштування -> клавіші, знайдіть «історія-наступний» та «попередня історія» та залиште їх за допомогою комбінації клавіш за замовчуванням або призначте «стрілку вгору» та «стрілку вниз» за типовою очікуваною поведінкою терміналу .

Це в режимі очікування 2.7 на OSX Mavericks.


2

Якщо ви використовуєте Debian Jessie, запустіть це, щоб виправити встановлення системи 2.7.9

sudo apt-get install libncurses5-dev libncursesw5-dev

Щоб виправити іншу 3.5.2інсталяцію, яку я встановив за допомогою pyenv :

pip install readline

Джерела:

[1] https://www.cyberciti.biz/faq/linux-install-ncurses-library-headers-on-debian-ubuntu-centos-fedora/

[2] https://github.com/yyuu/pyenv/isissue/240

[3] https://stackoverflow.com/a/40229934/332788


Встановлення libncurses5-dev та libncursesw5-dev було достатньо, щоб виправити мою установку Python 3.5, але Python 3.6 розірвався після того, як я встановив модуль для перегляду ліній для нього. Напевно, потрібно перекомпілювати.
Андрій Макуха

Це допомогло мені Ubuntu 18.04 python версії 3.7.3pip install readline
akpp

2

За допомогою клавіш зі стрілками перейдіть до початку команди та натисніть клавішу, введіть її копії як поточну команду.

Потім просто натисніть клавішу Enter, щоб запустити її знову.


1

Ipython - це не завжди так ... Мені це дуже подобається, але якщо спробувати запустити оболонку Django з ipython. Щось на кшталт >>>

ipython manage.py shell

це не працює правильно, якщо ви використовуєте virtualenv. Django потребує деяких спеціальних включень, яких там немає, якщо ви запускаєте ipython, тому що він запускає системний python, але не такий віртуальний.


1

Це може статися, коли ви запустите python script.pyпроти просто pythonдля того, щоб увійти в інтерактивну оболонку, серед інших причин відключення читання.

Спробуйте:

import readline

1

Стрілка вгору працює лише в командному рядку Python.

У IDLE (Python GUI) за замовчуванням є: Alt-p: отримує попередню команду, що відповідає тому, що ви ввели. Alt-n: отримує наступне ... Наприклад, у Python 2.7.9 можна побачити / змінити клавіші дій, вибравши: Опції -> Налаштувати IDLE -> (клавіша Tab)


1

Для анаконди для python 3.5 мені потрібно було встановити ncurses

conda install ncurses

Після завершення ncursesвкладки встановлення в інтерактивній оболонці працювали історія та навігація стрілками ліворуч та праворуч.



1

Для повторення останньої команди в python ви можете використовувати <Alt + n>у windows


0

Стрілка вгору працює і для мене. І я не думаю, що вам не потрібно встановлювати модуль Readline для вбудованого в python командного рядка. Ви повинні спробувати Ipython, щоб перевірити. А може, це проблема вашої карти клавіатури.


0

Якщо ви користуєтесь MacOSX, натисніть, control pщоб перейти до курса та control nзменшити його. Я використовую оболонку IDLE Python 3.4.1.



0

У Ubuntu 16.04 у мене була така ж проблема після оновлення Python з попередньо завантаженої версії 3.5 до версії 3.7 з вихідного коду . Як запропонував @erewok, я так і зробив

sudo apt-get install libncurses-dev libreadline-dev

далі: sudo make install Після цього спрацювала клавіша зі стрілкою вгору. Не впевнений, який модуль потрібен для усунення проблеми або обох, але без "зробити встановлення" жоден не буде працювати. Під час початкового виготовлення були деякі помилки з червоним прапором, але ігнорували та завершували збірку. Цього разу, схоже, помилок не було.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.