From 67c2ea771ace306101c8f82afd79661c78adaa16 Mon Sep 17 00:00:00 2001 From: Brian Daniels Date: Mon, 31 Oct 2016 15:39:34 -0500 Subject: [PATCH] Fixing project.py -S printing problem Printing too large of a string can fail in Windows, as detailed here: https://bugs.python.org/issue11395. This works around the problem by adding a print_large_string function that breaks up the string into smaller pieces before printing it. --- tools/project.py | 3 ++- tools/utils.py | 21 +++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/tools/project.py b/tools/project.py index 3bd4f3a3a22..ad9e5ed209f 100644 --- a/tools/project.py +++ b/tools/project.py @@ -18,6 +18,7 @@ from tools.utils import argparse_filestring_type, argparse_many, args_error from tools.utils import argparse_force_lowercase_type from tools.utils import argparse_force_uppercase_type +from tools.utils import print_large_string from tools.project_api import export_project, get_exporter_toolchain from tools.options import extract_profile @@ -189,7 +190,7 @@ def main(): # Only prints matrix of supported IDEs if options.supported_ides: - print mcu_ide_matrix() + print_large_string(mcu_ide_matrix()) exit(0) # Only prints matrix of supported IDEs diff --git a/tools/utils.py b/tools/utils.py index 734dfae0e07..6ee32716137 100644 --- a/tools/utils.py +++ b/tools/utils.py @@ -24,6 +24,7 @@ from os.path import isdir, join, exists, split, relpath, splitext, abspath from os.path import commonprefix, normpath, dirname from subprocess import Popen, PIPE, STDOUT, call +from math import ceil import json from collections import OrderedDict import logging @@ -486,3 +487,23 @@ def parse_type(not_parent): else: return not_parent return parse_type + +def print_large_string(large_string): + """ Breaks a string up into smaller pieces before print them + + This is a limitation within Windows, as detailed here: + https://bugs.python.org/issue11395 + + Positional arguments: + large_string - the large string to print + """ + string_limit = 1000 + large_string_len = len(large_string) + num_parts = int(ceil(float(large_string_len) / float(string_limit))) + for string_part in range(num_parts): + start_index = string_part * string_limit + if string_part == num_parts - 1: + print large_string[start_index:] + else: + end_index = ((string_part + 1) * string_limit) - 1 + print large_string[start_index:end_index],