如何在PowerShell中运行PYTHON argComplete

bihw5rsg  于 2022-11-10  发布在  Shell
关注(0)|答案(1)|浏览(106)

我正在尝试查看是否可以使用Windows PowerShell中的参数自动完成功能来执行我的python脚本。据称,PowerShell支持参数补全。
下面是一个不起作用的最小例子:


# !/usr/bin/env python

# PYTHON_ARGCOMPLETE_OK

import argparse
import argcomplete
from argcomplete.completers import EnvironCompleter

def argument_parser() -> argparse.ArgumentParser:
    parser = argparse.ArgumentParser(description="Minimal app where arcomplete should work")
    parser.add_argument("--version", action="store_true", help="print out version").completer = EnvironCompleter
    parser.add_argument("--do-this", action="store_true", help="do this").completer = EnvironCompleter
    parser.add_argument("--do-that", action="store_true", help="do that").completer = EnvironCompleter
    return parser

if __name__ == "__main__":
    parser = argument_parser()
    argcomplete.autocomplete(parser)
    cli_args = parser.parse_args()

然后在PowerShell中我尝试:输入python -i minimal -,然后按下<TAB>,没有任何React。我做错了什么?也许我应该提一下,我没有启用全局自动完成功能。不知何故,当我在PowerShell中运行activate-global-python-argcomplete时,我得到一个“Open With...”对话。

ezykj2lf

ezykj2lf1#

这是可能的,您只需要一个 Package 器脚本并注意正确的编码

parser = argument_parser()
    output_stream = None
    if "_ARGCOMPLETE_POWERSHELL" in os.environ:
        output_stream = codecs.getwriter("utf-8")(sys.stdout.buffer)
    argcomplete.autocomplete(parser, output_stream=output_stream)
    args = parser.parse_args()

我已经创作了一个minimal working example。它是基于Tibor's mat example的,但那个实际上不起作用,因为它缺少缓冲区的utf-8编码。

相关问题