2017-08-19 27 views
0

input()関数のデータを入力しようとすると、linuxでは矢印キーが機能しません。私はエスケープ文字を取得します。下記(左矢印キーを押したとき)を参照してください。input()関数のデータを入力中に矢印キーが機能しない

[email protected]:~$ python3 -c "x = input('enter a number '); print(x)" 
enter a number 123^[[D^[[D 

私は(私はPythonシェルにそれをインポートすることができています)readlineがインストールされています。 矢印キーは、インタラクティブなインタプリタでうまく動作しますが、上記の場合(またはスクリプトからinput()を実行したとき)は正しく動作しません。

何故その理由が考えられますか?

+0

コマンドラインツールを書く場合、対話的に 'input()'を使うのではなく、コマンドライン引数( 'sys.argv [1:]')を読むのが適切な解決策です。 – tripleee

答えて

2

documentationは言う:

のreadlineモジュールがロードされた場合には、入力()は精緻な行編集およびヒストリ機能を提供するために、それを使用します。あなたの例では

、あなたはreadlineモジュールをロードしていません。これに

x = input('enter a number:') 
print(x) 

:あなたが期待するよう

import readline 
x = input('enter a number:') 
print(x) 

第二の例は、最初の例がありませんしながら、(readlineのサポートは、矢印キーなど、仕事アクティブ)に動作します。この動作を比較readlineサポート。コマンドラインで

、これは次のようになります。

python3 -c "import readline; x=input('enter a number '); print(x)" 
+0

あなたは正しいです。 'readline'を読み込みます。しかし、私はそれをインストールして以来、それは別の方法で動作するはずです。私は、 'readline'が正しくインストールされているかどうかを確認するために' pip install'を試みます。 – debashish

+0

"installed"は "loaded"と同じではありません。 'input'関数で' readline'サポートを有効にするには、モジュールを明示的に 'import 'する必要があります。ドキュメントは、readlineモジュールが "読み込まれている"ことを明示しています。 – larsks

+0

これは 'input()'を使うたびに 'readline'をインポートする必要があるのですか?これはWindowsでは必要ではありませんでした。 – debashish

0

私はあまりにも、あなたはそれをインポートする必要が任意のモジュールのためのLinuxを使用しています。

は、例えばreadlineのモジュールのために、私はこれは私が

import os 
import sys 

をしなければならないとしても、OSまたはSYSモジュールは、しかし、これが唯一のそのモジュールに適用されるすべてのモジュールに適用されます

import readline 

をしなければなりませんあなたは正しくインストールされました。あなたは間違ってreadlineのをインストールしている場合ではないとしても

import readline 

動作します。あなたがまっすぐコンソールからそれをやっていると、これはあなたが持っているのreadlineが、他のすべてのモジュールだけではないに適用され、取得する場合

python3 -c "import readline; x = input('enter a number '); print(x)" 

するための手段

関連する問題