0

Pythonスクリプト内でBashタブ補完を設定しようとしていますが、スクリプトが終了すると補完が持続しないようです。私が今試しているのは:

from subprocess import call
options = {'option1' : option1,
           'option2' : option2}
all_options = string.join(options.keys())
call('complete -W "%s" -f python_cmd' %all_options, shell=True)

python_cmd は、最初の引数としてオプションの 1 つを取る Python スクリプトです。このスクリプトを実行すると、コマンドの後でオプションが完了しません。コマンドラインから完全なコマンドを直接呼び出すと、これは正常に機能しますが、Python から呼び出すことができる必要があります。これは、スクリプトで終わる call() と関係があると推測しています。スクリプトが終了した後、これを持続させる方法を知っている人はいますか?

4

1 に答える 1

2

私はうまくいくものを見つけました。私がやろうとしていることの目的をよりよく反映するように質問を更新しました。オプションを使用する python スクリプトを実行するときに、コマンド ラインで完了する辞書からオプションを取得できるようにしたいと考えています。この理由は、オプションが頻繁に追加または変更されるため、ユーザーがこのコマンドのセットアップ スクリプトを実行するたびに、bashrc に追加するか、bashrc をリソース化する必要がないようにするためです。私が見つけたのは、評価とバッククォートを使用してbashrcに1行だけ追加することです。したがって、答えのようなオプションを取得するスクリプトがある場合:

## getOptions.py
import sys
options = {'option1' : option1,
           'option2' : option2}
all_options = string.join(options.keys())
sys.stdout.write('complete -W "%s" -f cmd' %all_options)

次に、bashrc に次の行を追加します (またはセットアップ スクリプトから実行します)。

eval `getOptions.py`  #backticks, not single quotes

これにより、オートコンプリートが正しく設定され、環境変数に対しても機能します。これがこれを行うための最良の方法であるかどうかはわかりませんが、動作し、セットアップスクリプトを実行するか、bashrc にある場合はログインすると、Python に加えられた変更が自動的に完全なコマンドに入れられます。

于 2015-09-01T13:51:16.577 に答える