2011-12-05 39 views
48

Pythonスクリプトの引数にも自動補完をしたいと思います。Pythonのargparseとbashの補完

私は本当にbash_completionは(引数のために)働いていた方法を理解していなかったが、私が掘った後、私はそれを理解:それはすべての

  • コマンドに完了した機能をバインドするために「完全」を使用

    1. 関数を完了するのは基本的に引数パーサーのコピーです。

    特に2番目の点は、自動的に生成したいからです。

    最善のことは、シェルが完了するかについて、すべてのTABで私のプログラムに要求しますが、私は、これは実際に動作することができないという印象を持っている、ということが正しいことでしょうか?

    2番目のオプションは、おそらくargparseパーサーから正しく完了するシェル関数にコンバータを書き込むことです。

  • +5

    このスレッドは見たことがありますかhttp://bugs.python.org/issue4256? 'optparse'には自動的なシェル補完サポートがあるようです:http://pypi.python。org/pypi/optcomplete – Chris

    答えて

    13

    Bash "completion"は本当に素晴らしいです。 Pythonで書かれたプログラムのために簡単です....

    私はこれがあなたが欲しいものだと思う:optcomplete: Shell Completion Self-Generator for Python。 Ubuntuの "python-optcomplete"パッケージとして利用できます。

    あなたはPythonプログラムに数行を挿入して、ユーザー(1時間)は引数を完了する方法はbashを伝えるためにbashの「完全な」プログラムを実行します:

    complete -F _optcomplete <program> 
    

    、今ユーザーが完了したことを持っています!デフォルトでは、プログラムオプションを簡単に完了できます。特定のオプションの補完方法をカスタマイズする方法の例を参照してください。それは美しく書かれており、サブコマンド、代替の補完オプションなどを扱うために拡張が容易です!

    更新:zshの中に完了するために

    (optparseのとargparseの両方のための)@englebipで述べたようにgenzshcomp 0.3.1 : Python Package Index

    を参照してください、我々はまだPythonの2.7で導入され、新しい​​モジュールのための同様のものが必要optparseは推奨されなくなりました。ここで

    はその方向に移動する上での議論です:

    も参照してください、それがどのように行われるかのこのような背景:How does argparse (and the deprecated optparse) respond to 'tab' keypress after python program name, in bash? - Stack Overflow

    +2

    これは本当に素晴らしいですが、現在の廃止された 'optparse'モジュールで動作し、現在の' argparse'では動作しません。 'argparse'の再実装の考え方は? – englebip

    +0

    @englebip置換えargparseがPython 2.7とPython 3.2で初めて導入されて以来、 'optparse'を時代遅れと表現するのは難しいです。正式な用語は「廃止予定」です。これは長い間続く可能性があります。しかし、私は本当にargparseのためのoptcompleteのようなものを見たいと思うし、それを実現させる努力があります。 – nealmcb

    58

    恥知らずな自己宣伝:https://github.com/kislyuk/argcomplete

    argcompleteはargparseのbash補完を提供します。

    +2

    私もそれをお勧めします。 –

    +0

    また、_exactly_ @ andrea-crottiが探しているもの – Thomas

    +0

    @weaverドキュメントから、グローバル補完を有効にするか、特定のevalステートメントをbashrcに追加する必要があるようです。補完スクリプトを作成し、スクリプトがどこにあるかをbashに知らせる方法はありますか? – balki