2011-07-11 9 views
10

(python)ユーザー入力によるファイルパスの自動補完

ファイルパスの入力を取得しようとしています。かなり基本的なようですが、私はreadlineやrlcompleterの作業をすることができません。

かなり: variable = raw_input( 'Filepath:')そして、ファイルパスにはシェルのようにオートコンプリート機能があります。

私はpythonに限定されていません。ファイルパスとして変数を設定し、オートコンプリート機能を使用してファイルパスを取得できる限り、任意の言語を使用したいと思います。

私はこれを見てきました:何かを探すのに役立つTab completion in Python's raw_input()ですが、問題は "余分な"のようなファイルパスの前にコマンドが必要だということでした。変数をファイルパスとして設定する必要があります。あなたはそれがかなりシンプルだと思うだろうが、私はどこにでもそれほど多くを見つけていないし、私が見つけた少数は私が探していたものではなかった。

bashにはコマンドラインで実行できるread -eコマンドがありましたが、それは奇妙なスクリプトでは認識されません。それは、オートコンプリートファイルパスと同じ変数を設定するためにスクリプト内で利用できるのであれば、私が探していたものです。

+0

ティルド展開、ファイル名グロビング、シェル変数展開などを実装したいのですか? Plsは、予想される入力を追加します... –

答えて

26

これは何か?

import readline, glob 
def complete(text, state): 
    return (glob.glob(text+'*')+[None])[state] 

readline.set_completer_delims(' \t\n;') 
readline.parse_and_bind("tab: complete") 
readline.set_completer(complete) 
raw_input('file? ') 
+0

このコンプリータの実装は、現在のディレクトリ外のパスを適切に完成させるようには見えないという点で、デフォルトの実装よりも劣ります。それにもかかわらず、興味深い作品に感謝します。 – eMPee584

+0

これは相対的な(つまり '../ ')'や '〜/ 'では機能しないようです。なぜ誰が知っていますか? – wovenhead

+0

out-of-cwd完了はOSX上で私のために働く:) しかし、出力の色はdoesnt :( –

1

これだけ緩くのp​​ythonであると私はそこに誰かがこれをハックし、あなたのすべての問題の種類...か何かを引き起こす可能性がある方法は、おそらくですが、これは私がうまくプレーするのbashとPythonを得た方法である疑いがあります一緒に。

import subprocess 

the_file=subprocess.check_output('read -e -p "Enter path file:" var ; echo $var',shell=True).rstrip() 
関連する問題