【问题标题】:parsing both Python and click command line options解析 Python 并单击命令行选项
【发布时间】:2018-01-24 18:16:44
【问题描述】:

我经常想分析一个用 Click 构建的 CLI 程序,但我不知道如何解析 Python 命令行选项和 click 命令行选项/参数。例如,如果我的脚本采用一个选项和两个参数,我可以像这样运行它:

python add.py --verbose 1 2

同样,当我分析一个简单(非 Click)脚本时,我可以这样做:

python -m cProfile -o stats.txt add_no_click.py 1 2

但是当我想分析 Click 脚本时,我得到了这个:

python -m cProfile -o stats.txt add.py --verbose 1 2
Error: no such option: -o

我知道我肯定遗漏了一些文档。对于它的价值,我在 Windows 10 64 位上使用 Python 2.7,尽管我怀疑它与答案有关。

【问题讨论】:

  • python 2 无法识别 '-o' 选项。你为什么感到惊讶?
  • @DYZ,'-o'与cProfile模块配合使用时,指定输出文件写入profile结果,如python -m cProfile [-o output_file] [-s sort_order] myscript.pycProfile docs

标签: python command-line-interface profiling python-click


【解决方案1】:

很抱歉自我回答,但希望这可能对其他人有所帮助。我所做的愚蠢的事情(并且我没有在上面的问题中显示)忘记只用sys.argv[1:] 调用 main。

示例程序:

import click

@click.command()
@click.option('-v', '--verbose', is_flag=True)
@click.argument('a', type=click.INT, required=True)
@click.argument('b', type=click.INT, required=True)
def main(verbose, a, b):
    if verbose:
        print('The answer is {}'.format(a + b))
    else:
        print(a + b)

if __name__ == '__main__':
    import sys
    main(sys.argv[1:])

运行它:

> python -m cProfile -o foo.stats add.py --verbose 1 2
The answer is 3

个人资料信息写入foo.stats

【讨论】:

    猜你喜欢
    • 2015-02-28
    • 1970-01-01
    • 2012-08-18
    • 1970-01-01
    • 2012-05-09
    • 2013-05-16
    • 2012-01-06
    • 2015-01-22
    • 2017-08-31
    相关资源
    最近更新 更多