关于Python-fire的文章出现了一点,所以我假装看到它。
已经确认可以工作的环境
- Macbook Pro 13inch 2015年初
- pyenv的Python 3.6.0
我自己阅读自述文件时的印象
实际比较
考虑一个带有简单的"返回添加两个接受的参数的结果"子命令
calc-1.py
1 2 3 4 5 6 7 8 | import fire class Calcurator(object): def add(self, first, second): return int(first) + int(second) if __name__ == '__main__': fire.Fire(Calcurator) |
calc-2.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | import argparse parser = argparse.ArgumentParser() parser.add_argument('mode') parser.add_argument('first') parser.add_argument('second') class Calcurator(object): def add(self, first, second): return int(first) + int(second) if __name__ == '__main__': args = parser.parse_args() cli = Calcurator() print(getattr(cli, args.mode)(args.first, args.second)) |
我认为可读性将大大提高。
如果您编写一些CLI处理程序,则参数解析器部分将占据相当一部分代码,因此,如果消除了这一点,将不胜感激。
帮助显示
似乎
calc-1.py
1 2 3 4 5 6 7 8 | $ python calc-1.py add -- --help Type: method String form: <bound method Calcurator.add of <__main__.Calcurator object at 0x1036f8fd0>> File: ~/Dropbox (nijibox)/Applications/act/calc-1.py Line: 5 Usage: calc-1.py add FIRST SECOND calc-1.py add --first FIRST --second SECOND |
calc-2.py
1 2 3 4 5 6 7 8 9 10 | $ python calc-2.py -h usage: calc-2.py [-h] mode first second positional arguments: mode first second optional arguments: -h, --help show this help message and exit |
文件信息有点干扰,但它似乎像"用法"一样起作用。
比较处理时间
如果您不加考虑就打电话,显然
1 2 3 4 5 6 7 | $ time python calc-1.py add 12345 67890 80235 python calc-1.py add 12345 67890 0.60s user 0.29s system 30% cpu 2.945 total $ time python calc-2.py add 12345 67890 80235 python calc-2.py add 12345 67890 0.07s user 0.07s system 77% cpu 0.179 total |
仅一次比较时看起来像这样。似乎相差约0.5秒。
我试图用
进行这样的循环。
loop.py
1 2 3 4 5 6 7 8 9 | import sys import subprocess script = sys.argv[1] count = int(sys.argv[2]) for _ in range(count): proc = subprocess.Popen('python {} add 12345 67890'.format(script).split(), stdout=None) proc.communicate() |
loop.py
1 2 3 4 5 6 7 8 9 10 11 | $ time python loop.py calc-1.py 10 > /dev/null python loop.py calc-1.py 10 > /dev/null 4.29s user 1.20s system 97% cpu 5.651 total $ time python loop.py calc-2.py 10 > /dev/null python loop.py calc-2.py 10 > /dev/null 0.40s user 0.17s system 93% cpu 0.614 total $ time python loop.py calc-1.py 100 > /dev/null python loop.py calc-1.py 100 > /dev/null 45.53s user 12.45s system 88% cpu 1:05.32 total $ time python loop.py calc-2.py 100 > /dev/null python loop.py calc-2.py 100 > /dev/null 3.39s user 1.06s system 94% cpu 4.731 total |
我尝试重复几次,但平均起来似乎要多花0.4至0.5秒。
考虑到示例代码的主要处理过于简单,因此似乎有足够的情况在实际操作中会出错。
灯光验证后的印象