Модуль Python Clik в WinDbg

Я использую модуль click уже некоторое время, и я думаю, что он потрясающий. Однако у меня есть некоторые проблемы с использованием его в плагине WinDbg Python.

Я использую следующий скрипт, который отлично работает в Linux:

import click

@click.group()
def shell():
    pass

@shell.command()
@click.option('--name', help='Your name please')
def hello(name):
    click.echo(name)

if __name__ == "__main__":
    shell()

Успешный вызов скрипта можно увидеть ниже (это в командной строке Linux):

# python test.py hello --name=aaa
aaa

Неудачный вызов скрипта можно увидеть ниже (это в плагине WinDbg):

0:000> !py C:\Users\windbg\test.py hello --name=aaa
Usage: test.py [OPTIONS] COMMAND [ARGS]...

Options:
  --help  Show this message and exit.

Commands:
  hello

Любые идеи, почему это происходит и почему плагин WinDbg не принимает параметры, чтобы их можно было правильно анализировать по клику.

1 ответ

Решение

Это клик "фича":

см. click\utils.py:

if PY2 and WIN and _initial_argv_hash == _hash_py_argv():
    return _get_windows_argv() 
return sys.argv[1:]

def _get_windows_argv():
    argc = c_int(0)
    argv_unicode = CommandLineToArgvW(GetCommandLineW(), byref(argc)) 

Итак, click получает аргументы не из sys.args, а из настоящей командной строки windbg.

Вы можете легко это исправить:

if __name__ == "__main__":
    import sys
    shell(args=sys.argv[1:])
Другие вопросы по тегам