擅长:python、mysql、java
<p>看看安德烈·基斯利克的<a href="https://argcomplete.readthedocs.org/en/latest/#activating-global-completion%20argcomplete" rel="noreferrer">argcomplete</a>。</p>
<p>安装时使用:</p>
<pre><code>pip install argcomplete
</code></pre>
<p>在调用<code>parser.parse_args()</code>之前,导入模块并在源代码中添加一行:</p>
<pre><code>#!/usr/bin/env python
import argparse as ap
import argcomplete
def main(**args):
pass
if __name__ == '__main__':
parser = ap.ArgumentParser()
parser.add_argument('positional', choices=['spam', 'eggs'])
parser.add_argument('--optional', choices=['foo1', 'foo2', 'bar'])
argcomplete.autocomplete(parser)
args = parser.parse_args()
main(**vars(args))
</code></pre>
<p>为了确保bash知道这个脚本,可以使用</p>
<pre><code>eval "$(register-python-argcomplete your_script)"
</code></pre>
<p>您应该将该行放入<code>~/.bashrc</code>中,或者遵循argcomplete的文档并激活“全局”完成。</p>
<p>之后你按要求完成工作。</p>
<p>其工作方式是eval行创建一个函数<code>_python_argcomlete</code>,该函数使用<code>complete</code>注册。(运行<code>register-python-argcomplete your_script</code>来查看哪些被评估为bash)。autocomplete函数查找由bash完成机制设置的环境变量,以查看是否需要执行操作。如果它起作用,它将退出程序。如果它不起作用,这是对程序的正常调用,函数什么也不做,程序的正常流继续。</p>