#!/usr/bin/env python
import sys
# let's define some sample functions to be called on passed arguments
def f1():
print("F1 called!")
def f2():
print("F2 called!")
def f3():
print("F3 called!")
def f_invalid(): # a simple invalid placeholder function
print("Invalid command!")
def f_list(): # a function to list all valid arguments
print(" ".join(sorted(arguments.keys())))
if __name__ == "__main__": # make sure we're running this as a script
arguments = { # a simple argument map, use argparse or similar in a real world use
"arg1": f1,
"arg2": f2,
"arg3": f3,
"list_arguments": f_list
}
if len(sys.argv) > 1:
for arg in sys.argv[1:]: # loop through all arguments
arguments.get(arg, f_invalid)() # call the mapped or invalid function
else:
print("At least one argument required!")
注:スクリプト(chmod +x test.py
)に実行可能フラグを追加のでそのシェバングを実行する代わりに、としてそれを提供するために使用されていることを確認しtest.py
- 我々はその許容可能な引数を認識してスクリプトを作成しましょうPythonインタプリタの引数。
は別に、すべての決まり文句から、重要な引数はlist_arguments
ある - それは、このスクリプトに利用可能なすべての引数を示しますし、我々はbash
どのようにオートコンプリートに指示するために、当社のbash
完了スクリプトでこの出力を使用します。これを行うには、別のスクリプトを作成するには、のはそれtest-completion.bash
を呼びましょう:
#!/usr/bin/env bash
SCRIPT_NAME=test.py
SCRIPT_PATH=/path/to/your/script
_complete_script()
{
local cursor options
options=$(${SCRIPT_PATH}/${SCRIPT_NAME} list_arguments)
cursor="${COMP_WORDS[COMP_CWORD]}"
COMPREPLY=($(compgen -W "${options}" -- ${cursor}))
return 0
}
complete -F _complete_script ${SCRIPT_NAME}
何それは本質的complete
_complete_script
機能に追加されていtest.py
オーバー完了が呼び出されるたびに呼び出されます。 _complete_script
ファンクション自体は、最初にのtest.py
を呼び出して受け入れ可能な引数を取得し、compgen
を使用してcomplete
がそれを印刷できるようにするために必要な構造を作成します。
source test-completion.bash
そして、あなたはbashのように動作します:テストするに
、あなたが必要なのは、このスクリプトを調達することです
$ ./test.py [tab]
arg1 arg2 arg3 list_arguments
そして、何よりだ、それはあなたのPythonスクリプトから完全に制御可能です - list_arguments
のコマンドにリストとして印刷されるものは、自動補完のヘルプとして表示されるものです。
変更を永続的にするには、.bashrc
に単にsource
行を追加するか、より構造化されたソリューションが必要な場合は、ご使用のOSのガイドラインに従うことができます。たとえば、git-flow-completion
ページに記載されている2つの方法があります。もちろん、これはあなたが実際にbash-autocompleteをシステムにインストールして有効にしていることを前提としていますが、そうしなければgit
の自動補完は機能しません。
オートコンプリートと言えば、git-completion.bash
sourceをチェックすることで、その実装方法を見ることができます。警告の言葉ですが、それはかすかなものではありません。
これをPython IDE内で実行しようとしている場合、いいえ、私は信じていません。Git Pythonライブラリを使用すると、gitコマンドを実行するのと同等のサポートされているコマンドが得られます。 – idjaw
私はあなたがカスタムの 'complete'スクリプトを実行することができると確信していますが、あなたが今までに書いた中で最も痛いものです。 –
私は同じことではないことを知っていますが、[cmd](https://docs.python.org/2/library/cmd.html)モジュールを見たことがありますか?同様の機能を持っています。 – Himal