我一直在使用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插件不接受参数以便通过正确点击来解析它们。
答案 0 :(得分:3)
点击“功能”:
请参阅点击\ 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))
所以,点击获取args不是来自sys.args,而是来自windbg真正的命令行。
您可以轻松解决此问题:
if __name__ == "__main__":
import sys
shell(args=sys.argv[1:])