2012-05-01 15 views
3

argparseパラメータを使用すると、bashタブ補完がファイルを返すことが少なくなっていることに気付きました。どうすれば変更/制御できますか?argparseでのBashタブ補完でディレクトリ内のすべてのファイルが表示されない

最小限のコード例

[email protected]:~/test$ cat argparsetest.py 
import argparse 
parser.add_argument('-i', help='input', required=True) 

bashの補完例:

# shows all the files 
[email protected]:~/test$ python argparsetest.py 
argparsetest.py result.png  u1.py 

# does not show the image result.png I am actually interested in 
[email protected]:~/test$ python argparsetest.py -i 
argparsetest.py u1.py    

は、2つの同様の質問がすでにありますが、私はそれらを参考になっ見つかりませんでした。

+0

thieの動作を再現できません。 python 2.7.2、bash補完版 '1:1.3-1ubuntu6'を使用しています。 '-i'の有無にかかわらず、タブは両方ともpngファイルを含みます。また、最小限のコードで 'parser = argparse.ArgumentParser(description = 'do things')'のような行が欠落しています。 – JosefAssad

答えて

4

これはargparse、あるいはPythonの自体とは関係ありません。おそらく "programmable bash completion"が有効になっていて、コマンドラインが "python"で始まるので、完了ルールは混乱しています。

ことを回避する最も簡単な方法は、あなたのpythonファイルの先頭に追加することです。

#!/usr/bin/env python 

、その後、Pythonスクリプトの実行を行います。その後、

[email protected]:~/test$ chmod u+x argparsetest.py 

とそれを直接呼び出して、明示的に「パイソン」呼び出すことなく:また

[email protected]:~/test$ ./argparsetest.py<TAB> 
argparsetest.py result.png  u1.py 

[email protected]:~/test$ ./argparsetest.py -i<TAB> 
argparsetest.py result.png  u1.py 

を、あなたはbashの補完コをオフにすることができますmpletely

complete -r 

そして、あなたは〜/ .bashrcのか、おそらく次のようになりの/ etc/bashrcにどちらかのライン、将来のセッションのためにそれを無効にコメントアウトまたは削除する場合と:

if [ -f /etc/bash_completion ]; then 
    . /etc/bash_completion 
fi 
関連する問題