如何使 python argcomplete 使用 PowerShell 运行

Zab*_*aba 5 python powershell

我正在尝试查看是否可以在 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()
Run Code Online (Sandbox Code Playgroud)

然后在 Powershell 中我尝试:输入python -i minimal -然后按<TAB>,什么也没有发生。我究竟做错了什么?也许我应该提到我没有启用全局自动完成功能。不知何故,当我activate-global-python-argcomplete在 powershell 中运行时,我收到“打开方式...”对话框。

Zab*_*aba 1

有可能,您只需要一个包装脚本并注意正确的编码

    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()
Run Code Online (Sandbox Code Playgroud)

我编写了一个最小的工作示例。它基于Tibor 的 mat 示例,但该示例实际上不起作用,因为它缺少缓冲区的 utf-8 编码。