1.21 Python 开发的几个小 Tips

1. 重定向标准输出到文件

import contextlib

def unshelve_task():
    pass

@contextlib.contextmanager
def close_stdout():
    raw_stdout = sys.stdout
    file = open(log_file, 'a+')
    sys.stdout = file

    yield

    sys.stdout = raw_stdout
    file.close()

with close_stdout():
    unshelve_task()

2. 将子网掩码转换为cidr

如何使用netaddr库将ipv4子网掩码转换为cidr表示法? 示例:255.255.255.0到/ 24

使用netaddr:

>>> from netaddr import IPAddress
>>> IPAddress("255.255.255.0").netmask_bits()
24

您也可以在不使用任何库的情况下执行此操作,只需在网络掩码的二进制表示中计算1位:

>>> netmask = "255.255.255.0"
>>> sum([bin(int(x)).count("1") for x in netmask.split(".")])
24

image0