Pythonインタープリターシェルで最後のコマンドを繰り返す方法は?


133

最後のコマンドをどのように繰り返しますか?通常のキー:Up、Ctrl + Up、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)で正しく動作しますが、奇妙です。
Vincent Savard、2010年

3
ちなみに、上向き矢印はWindowsで機能します。どのシェルを使用していて、どのOSの端末プログラムを使用していますか?
fmark

Fedora 13に別のpython 2.6.6インストールをインストールし、gnome-terminalにデフォルトのPythonシェルを使用してvirtualenvを実行します
virtualenv kakarukeys

5
ちなみに、これらの「無意味な」文字は、メインフレームコンピュータが電話回線を介して端末からアクセスされた時代にDECや他の人々によって開発された「エスケープシーケンス」です。^ [はESC(エスケープ)、^ [[はエスケープ-[またはCSI(制御シーケンスイニシエーター、IIRC)で、CSI-Aは「アップ」のシーケンスです。ncursesを有効にすると、以下の回答を使用して、これらのシーケンスは表示されるのではなく解釈されます。
jcomeau_ictx 2013年

4
ソース(Python3.4)からPythonのバージョンをインストールしたため、この問題が発生しました。以下のコメントの一部はIpythonのインストールを推奨しており、Ipythonでも同じ動作をすることを述べておきます。Ubuntu 12.04サーバーの場合はlibncurses-dev libreadline-devconfigure-make-installPython をインストールしてからPython をインストールする必要があり、その後は問題なく動作しました。回答として追加...
erewok

回答:


59

以下を使用して、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

これを有効にするには、モジュールreadline、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:環境変数PYTHONSTARTUPを上記のコードを含むファイルパスに設定するだけです。また、必要なモジュールがあるかどうかも確認してください。
pyfunc 2010年

6
必要はありません。basakの回答の指示に従い、キーバインディングを割り当ててください
Timofey

1
やりすぎ。alt + pを実行してください
user32882

164

IDLEで、[オプション]-> [IDLEの設定]-> [キー]に移動し、history-next、次にhistory-previousを選択してキーを変更します。

次に、[選択用に新しいキーを取得]をクリックすると、必要なキーの組み合わせを選択できます。


4
検索者にとっては、これはLinux Mint 17 Cinnamonでも機能します。
user1063287 14年

4
Windows 10、Python 3.6.1でも動作します。おかげで、これは特にきれいで明確です。新しい学習者に役立ちます。
jyao

1
最も適切な答え。正しいものとして選択されている必要があります。
デビッドソンリマ

オプションはありません-> Python 2.7のIDLEを構成します:/
DaniPaniz

私は設定/設定(python 2.7、MacのIDLE)に移動する必要があり、そこで履歴の次を見つけました。ありがとうございます:)
DaniPaniz

48

歴史からの前のコマンドの場合はAlt + p、履歴からの次のコマンドの場合はAlt + n。

これはデフォルトの設定であり、オプション-> IDLEの設定からお好みでこれらの主要なショートカットを変更できます。


2
これは、history-next / history-previousと呼ばれます
DaniPaniz 2017年

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.


1
これは私がIDLEで探しているソリューションです。上矢印は、bashシェルから起動されたpythonインタープリターで動作しました。
John Doe


7

Ctrl + pは上矢印の通常の代替手段です。PythonビルドでGNU readlineが有効になっていることを確認してください。


1
これは、印刷するかどうかを尋ねる
アシュリーダウ2018

7

Ubuntu Server 12.04では、ソースからPythonのバージョン(Python3.4)をインストールした後、この問題が発生しました。

ここのコメントのいくつかはIpythonのインストールを推奨しており、Ipythonでも同じ動作をすることを述べたいと思います。私が知ることができることから、これはreadlineの問題です。

Ubuntu 12.04サーバーの場合、up-history(readline)動作を有効にするには、ソースからPython をインストールlibncurses-devしてからインストールlibreadline-devする必要がありました。私はほとんどこれをしました:

sudo apt-get install libncurses-dev libreadline-dev

その後、以前にインストールしたPython(システムPYTHONではなく、ソースからインストールしたものではありません)を削除し、ソースから再インストールすると、すべてが期待どおりに機能しました。

私はpipで何かをインストールしたり、.pythonstartupを編集したりする必要はありませんでした。


2
この問題が発生したすべての人のために、私は14.04にいて、このソリューションを使用してこの問題をから3.4.0に修正することができました3.4.2
ctzdev 2014年

2
これが機能するようにするにはsudo pip install readline、この後に行う必要がありました(python 2.7.11)
Rob Watts

1
これは64ビットUbuntu 16でも機能しました。32ビットのPython 3.5.2があり、ソースからコンパイルおよびインストールされていますが、すでにaptでイ​​ンストールされている64ビットのPythonがあります。sudo apt-get install libncurses-dev libncurses-dev:i386 libreadline-dev libreadline-dev:i386ソースビルドのPythonを実行して再インストールしました。
Alex Che

7

デフォルトでは、前のコマンドでALT + pを使用します。代わりに、IDLE GUi >> OPtions >> Configure IDLE >> Key >> Custom Key Bindingで上矢印に変更できます。readlinesモジュール以外に、カスタムスクリプトを実行する必要はありません。 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 port install py-readline(Macの場合)

(既にPIPをインストールしていると仮定します。)


2
'pip install readline'がうまくいきました。私のすべての制御シーケンスは、python 3.4手動インストール後の
Centos

「要件py-readlineを満たすバージョンが見つかりませんでした(バージョン:から)py-readlineに一致するディストリビューションが見つかりません」私はこの世界が嫌いです
DaniPaniz

インストールしたバージョンに応じて、pip2またはを使用してくださいpip3
not2qubit 2017年

2

OSXのpyfuncの回答のようなカスタムスクリプトは必要ありません(少なくとも異端者では)。アイドルで[アイドル]-> [設定]-> [キー]をクリックし、「history-next」と「history-previous」を見つけて、デフォルトのキーボードショートカットのままにするか、予想される通常の端末動作ごとに「上矢印」と「下矢印」を割り当てます。 。

これはOSX MavericksのIdle 2.7にあります。


2

Debian Jessieを使用している場合は、これを実行してシステムのインストールを修正してください 2.7.9

sudo apt-get install libncurses5-dev libncursesw5-dev

pyenvで3.5.2インストールした他のインストールを修正するには:

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/issues/240

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


libncurses5-devとlibncursesw5-devをインストールするだけでPython 3.5のインストールを修正できましたが、readlineモジュールをインストールした後、Python 3.6が壊れました。おそらく再コンパイルする必要があります。
Andriy Makukha 2018年

Ubuntu 18.04 pythonバージョン3.7.3pip install readline
akpp

2

矢印キーを使用してコマンドの先頭に移動し、Enterキーを押すと、そのコマンドが現在のコマンドとしてコピーされます。

次に、Enterキーを押してもう一度実行します。


1

Ipythonが常に機能するわけではありません...私はそれがかなり好きですが、ipythonでDjangoシェルを実行しようとすると、次のようなもの>>>

ipython manage.py shell

virtualenvを使用している場合は、正しく機能しません。Djangoはデフォルトのシステムpythonを起動するため、ipythonを起動した場合には存在しない特別なインクルードを必要としますが、その仮想インクルードは必要ありません。


1

これは、python script.pyvs を実行しpythonてインタラクティブシェルに入るときに、readlineが無効になっているなどの理由で発生する可能性があります。

試してください:

import readline

1

上矢印はPythonコマンドラインでのみ機能します。

IDLE(Python GUI)のデフォルトは次のとおりです。Alt-p:入力した内容に一致する前のコマンドを取得します。Alt-n:次を取得します...たとえば、Python 2.7.9では、選択するアクションキーを表示/変更できます:オプション-> IDLEの設定->(タブ)キー


1

anaconda for python 3.5の場合、インストールする必要がありました ncurses

conda install ncurses

後にncursesインストールタブの完全な、歴史、そして左と右の矢印を経由してナビゲートするには、対話型シェルで働いていました。


1

Python 2.xを搭載したMac

➜ ~ brew install rlwrap

rlwrapから始める

➜ ~ rlwrap python



0

上矢印も私にとってはうまくいきます。また、Python組み込みコマンドライン用のReadlineモジュールをインストールする必要はないと思います。UはIpythonをチェックしてみてください。または、キーボードマップの問題かもしれません。


0

MacOSXを使用している場合は、を押しcontrol pて上に循環し、下control nに循環します。IDLE Python 3.4.1 Shellを使用しています。



0

Ubuntu 16.04では、プリロードされた3.5 からソースコードからバージョン3.7に Pythonをアップグレードした後、同じ問題が発生しました。@erewokが示唆したように、私はやった

sudo apt-get install libncurses-dev libreadline-dev

続いて: sudo make install その後、上矢印キーが機能しました。問題を修正するためにどのモジュールが必要かは不明ですが、「make install」がなければ、どれも機能しません。最初のメイク中に、いくつかの赤旗エラーがありましたが、無視されてビルドが完了しました。今回は、エラーはないようです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.