私はMac OS XのデフォルトのPythonインタープリターに取り組んでおり、以前のコマンドをCmd+ K(クリア)しています。矢印キーを使って1つずつ確認することができます。しかし、bashシェルの--historyオプションのようなオプションはありますか?これは、これまでに入力したすべてのコマンドを表示しますか?
history
は組み込みシェルです。
私はMac OS XのデフォルトのPythonインタープリターに取り組んでおり、以前のコマンドをCmd+ K(クリア)しています。矢印キーを使って1つずつ確認することができます。しかし、bashシェルの--historyオプションのようなオプションはありますか?これは、これまでに入力したすべてのコマンドを表示しますか?
history
は組み込みシェルです。
回答:
readline.get_current_history_length()
長さを取得し、readline.get_history_item()
それぞれを表示するために使用します。
履歴全体を印刷するコード:
ワンライナー(迅速なコピーと貼り付け):
import readline; print('\n'.join([str(readline.get_history_item(i + 1)) for i in range(readline.get_current_history_length())]))
(またはより長いバージョン...)
import readline
for i in range(readline.get_current_history_length()):
print (readline.get_history_item(i + 1))
ワンライナー(迅速なコピーと貼り付け):
import readline; print '\n'.join([str(readline.get_history_item(i + 1)) for i in range(readline.get_current_history_length())])
(またはより長いバージョン...)
import readline
for i in range(readline.get_current_history_length()):
print readline.get_history_item(i + 1)
注:get_history_item()
は1からnまでのインデックスです。
import readline; print '\n'.join([str(readline.get_history_item(i)) for i in range(readline.get_current_history_length())])
history()
上記の関数をPythonインタープリターの起動スクリプト(env。varが指すスクリプト)に追加しました$PYTHONSTARTUP
。これからは、history()
どのインタープリターセッションでも入力できます;-)
Python 3インタープリターを使用すると、履歴は次の場所に書き込まれます
~/.python_history
cat ~/.python_history
quit()
現在のセッション履歴を含めるには、通訳が必要です~/.python_history
履歴をファイルに書き込みたい場合:
import readline
readline.write_history_file('python_history.txt')
ヘルプ機能は以下を提供します:
Help on built-in function write_history_file in module readline:
write_history_file(...)
write_history_file([filename]) -> None
Save a readline history file.
The default filename is ~/.history.
上記はpython 2.xでのみ機能するため、python 3.x(具体的には3.5)も同様ですが、若干の変更が加えられています。
import readline
for i in range(readline.get_current_history_length()):
print (readline.get_history_item(i + 1))
余分に注意してください()
(シェルスクリプトを使用して.python_historyを解析するか、Pythonを使用して上記のコードを変更することは、個人的な好みと状況によって異なります)
C:\>python -m pip install readline
=> Collecting readline
\ n Downloading https://files.pythonhosted.org/packages/f4/01/2cf081af8d880b44939a5f1b446551a7f8d59eae414277fd0c303757ff1b/readline-6.2.4.1.tar.gz (2.3MB)
\ n |████████████████████████████████| 2.3MB 1.7MB/s
\ n ERROR: Complete output from command python setup.py egg_info:
\ n ERROR: error: this module is not meant to work on Windows
\ n ----------------------------------------
\ n `エラー:コマンド「python setup.py egg_info」がC:\ Users \ dblack \ AppData \ Local \ Temp \ pip-install-s6m4zkdwのエラーコード1で失敗しました\ readline`
pip install readline
、readline
Windowsにはデフォルトでインストールされます。
unix / bashバージョンと同様の履歴を取得する単純な関数。
それが何人かの新しい人々を助けることを願っています。
def ipyhistory(lastn=None):
"""
param: lastn Defaults to None i.e full history. If specified then returns lastn records from history.
Also takes -ve sequence for first n history records.
"""
import readline
assert lastn is None or isinstance(lastn, int), "Only integers are allowed."
hlen = readline.get_current_history_length()
is_neg = lastn is not None and lastn < 0
if not is_neg:
flen = len(str(hlen)) if not lastn else len(str(lastn))
for r in range(1,hlen+1) if not lastn else range(1, hlen+1)[-lastn:]:
print(": ".join([str(r if not lastn else r + lastn - hlen ).rjust(flen), readline.get_history_item(r)]))
else:
flen = len(str(-hlen))
for r in range(1, -lastn + 1):
print(": ".join([str(r).rjust(flen), readline.get_history_item(r)]))
スニペット:Python3でテスト済み。python2に問題があるかどうかをお知らせください。サンプル:
完全な歴史:
ipyhistory()
過去10件の履歴:
ipyhistory(10)
最初の10履歴:
ipyhistory(-10)
それが人に役立つことを願っています。
@ Jason-V、ありがとう。次に、この例を見つけて、独自のスニペットに構成しました。
#!/usr/bin/env python3
import os, readline, atexit
python_history = os.path.join(os.environ['HOME'], '.python_history')
try:
readline.read_history_file(python_history)
readline.parse_and_bind("tab: complete")
readline.set_history_length(5000)
atexit.register(readline.write_history_file, python_history)
except IOError:
pass
del os, python_history, readline, atexit
これにより、コマンドが別々の行に出力されます。
import readline
map(lambda p:print(readline.get_history_item(p)),
map(lambda p:p, range(readline.get_current_history_length()))
)
焼き直しDoogleプリントラインの数字はないが、印刷する行数を指定することができないの答え。
def history(lastn=None):
"""
param: lastn Defaults to None i.e full history. If specified then returns lastn records from history.
Also takes -ve sequence for first n history records.
"""
import readline
assert lastn is None or isinstance(lastn, int), "Only integers are allowed."
hlen = readline.get_current_history_length()
is_neg = lastn is not None and lastn < 0
if not is_neg:
for r in range(1,hlen+1) if not lastn else range(1, hlen+1)[-lastn:]:
print(readline.get_history_item(r))
else:
for r in range(1, -lastn + 1):
print(readline.get_history_item(r))
history
シェルコマンドは、他のどのようなプログラムです。bash
コマンドの「オプション」ではありません。