def main():
options = parse_option()
initialize_log_handler(options.log_level)
logger = logbook.Logger("pingparsing cli")
logger.level = options.log_level
pingparsing.set_log_level(options.log_level)
output = {}
if is_use_stdin():
from concurrent import futures
pingparsing.set_log_level(options.log_level)
max_workers = (multiprocessing.cpu_count() * 2
if options.max_workers is None else options.max_workers)
count, deadline = get_ping_param(options)
logger.debug("max-workers={}, count={}, deadline={}".format(
max_workers, count, deadline))
try:
with futures.ProcessPoolExecutor(max_workers) as executor:
future_list = []
for dest_or_file in options.destination_or_file:
logger.debug("start {}".format(dest_or_file))
future_list.append(executor.submit(
parse_ping, logger, dest_or_file, options.interface,
count, deadline))
for future in futures.as_completed(future_list):
key, ping_data = future.result()
output[key] = ping_data
finally:
logger.debug("shutdown ProcessPoolExecutor")
executor.shutdown()
else:
ping_result_text = sys.stdin.read()
ping_parser = pingparsing.PingParsing()
ping_parser.parse(ping_result_text)
output = ping_parser.as_dict()
if options.indent <= 0:
print(json.dumps(output))
else:
print(json.dumps(output, indent=options.indent))
return 0
评论列表
文章目录