Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Give the Python Terminal a Persistent History

Is there a way to tell the interactive Python shell to preserve its history of executed commands between sessions?

While a session is running, after commands have been executed, I can arrow up and access said commands, I'm just wondering if there is some way for a certain number of these commands to be saved until the next time I use the Python shell.

This would be very useful since I find myself reusing commands in a session, that I used at the end of the last session.

like image 650
mjgpy3 Avatar asked Sep 08 '12 20:09

mjgpy3


People also ask

Where is Python history stored?

The History Log is stored in the . spyder-py3 (Python 3) or spyder (Python 2) directory in your user home folder (by default, C:/Users/username on Windows, /Users/username for macOS, and typically /home/username on GNU/Linux).

What is history function in Python?

The history() function above has an optional parameter to specify a maximum number of lines to be printed. If no argument is received, history() will print all commands given at the start of the session.

What is the shortcut key to repeat previous command in Python?

Alt + p for previous command from histroy, Alt + n for next command from history. This is default configure, and you can change these key shortcut at your preference from Options -> Configure IDLE.


2 Answers

Sure you can, with a small startup script. From Interactive Input Editing and History Substitution in the python tutorial:

# Add auto-completion and a stored history file of commands to your Python # interactive interpreter. Requires Python 2.0+, readline. Autocomplete is # bound to the Esc key by default (you can change it - see readline docs). # # Store the file in ~/.pystartup, and set an environment variable to point # to it:  "export PYTHONSTARTUP=~/.pystartup" in bash.  import atexit import os import readline import rlcompleter  historyPath = os.path.expanduser("~/.pyhistory")  def save_history(historyPath=historyPath):     import readline     readline.write_history_file(historyPath)  if os.path.exists(historyPath):     readline.read_history_file(historyPath)  atexit.register(save_history) del os, atexit, readline, rlcompleter, save_history, historyPath 

From Python 3.4 onwards, the interactive interpreter supports autocompletion and history out of the box:

Tab-completion is now enabled by default in the interactive interpreter on systems that support readline. History is also enabled by default, and is written to (and read from) the file ~/.python-history.

like image 84
Martijn Pieters Avatar answered Sep 20 '22 07:09

Martijn Pieters


Use IPython.

You should, anyway, because it's awesome: persistent command history is just one of the many many ways it's better than the stock Python shell.

like image 27
Daniel Roseman Avatar answered Sep 22 '22 07:09

Daniel Roseman