python - 同时使用 memory_profiler 和 docopt 时发生冲突

标签 python profiling

我有一个使用 docopt 的 Python 程序,并且似乎可以很好地解析命令行参数。但是,当我尝试在调用中包含内存分析器(使用 -m 内存分析器)时,docopt 无法解析命令并打印使用语句。这是一个示例程序:

"""
Usage:
  ids_transform [options]
  ids_transform --block BLOCK_MSG
  ids_transform --unblock
  ids_transform --version

Examples:
    ids_transform.py --block '2013-03-15 IM#123456 database down'
    ids_transform.py -c ../shared/etc/ids_transform.yaml

Options:
  -h --help                 show this help message and exit
  -c CONFIG --config=CONFIG config file
  -d --debug                begin debugging
  --force                   override block file; force run
  --profile                 use cProfile to gather statistics on process
"""

from docopt import docopt


if __name__ == '__main__':
    arguments = docopt(__doc__, version='1.0.0rc2')
    print(arguments)

这是一个成功的调用:

$ python ids.py -d --force -c foo.yml
{'--block': False,
 '--config': 'foo.yml',
 '--debug': True,
 '--force': True,
 '--help': False,
 '--profile': False,
 '--unblock': False,
 '--version': False,
 'BLOCK_MSG': None}

这是使用内存分析器时的错误:

$ python -m memory_profiler ids.py -d --force -c foo.yml
Usage:
  ids_transform [options]
  ids_transform --block BLOCK_MSG
  ids_transform --unblock
  ids_transform --version

我错过了什么?

最佳答案

看来 memory_profiler 并没有从 sys.argv 中剥离自身,所以(我猜)黑客应该自己做:

if sys.argv[0].endswith('memory_profiler.py'):
    del sys.argv[0]

关于python - 同时使用 memory_profiler 和 docopt 时发生冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15884509/

相关文章:

python - 将数字追加到列表的指定元素中

c++ - 为什么 gprof 告诉我从 main() 只调用一次的函数被调用了 102 次?

c - 如何使用oprofile计算C程序部分的执行时间?

java - jVisualVM 的内存检查器中的 "retained size"是什么意思?

python - Python 分析器测量的 CPU 时间与实际用户和系统时间之间的关系是什么?

python multiprocessing pool.map挂起

python - 如何将 Pandas 数据框附加到 Excel 工作表

python - 在 SLURM 中使用 sbatch 命令时如何导入本地 python 模块

python - 如何在 5 分钟内使 Django session 过期?

java - Yourkit UI 抛出 "There' s 没有应用程序在本地主机上运行,​​探查器代理配置为监听端口“异常