9
9
import json
10
10
import argparse
11
11
from prettytable import PrettyTable
12
+ from StringIO import StringIO
12
13
13
14
from utils import argparse_filestring_type , \
14
15
argparse_lowercase_hyphen_type , argparse_uppercase_type
@@ -385,7 +386,7 @@ def search_objects(self, path):
385
386
386
387
export_formats = ["json" , "csv-ci" , "table" ]
387
388
388
- def generate_output (self , export_format , file_output = None ):
389
+ def generate_output (self , export_format , file_output = None , silent = False ):
389
390
""" Generates summary of memory map data
390
391
391
392
Positional arguments:
@@ -396,38 +397,48 @@ def generate_output(self, export_format, file_output=None):
396
397
"""
397
398
398
399
try :
399
- if file_output :
400
- file_desc = open ( file_output , 'wb' )
400
+ if silent :
401
+ file_desc = None
401
402
else :
402
- file_desc = sys .stdout
403
+ if file_output :
404
+ file_desc = open (file_output , 'wb' )
405
+ else :
406
+ file_desc = sys .stdout
403
407
except IOError as error :
404
408
print "I/O error({0}): {1}" .format (error .errno , error .strerror )
405
409
return False
406
410
407
411
to_call = {'json' : self .generate_json ,
408
412
'csv-ci' : self .generate_csv ,
409
413
'table' : self .generate_table }[export_format ]
410
- to_call (file_desc )
414
+ output_string = to_call (file_desc )
411
415
412
- if file_desc is not sys .stdout :
416
+ if file_desc is not sys .stdout and file_desc is not None :
413
417
file_desc .close ()
414
418
419
+ return output_string
420
+
415
421
def generate_json (self , file_desc ):
416
422
"""Generate a json file from a memory map
417
423
418
424
Positional arguments:
419
425
file_desc - the file to write out the final report to
420
426
"""
421
- file_desc .write (json .dumps (self .mem_report , indent = 4 ))
422
- file_desc .write ('\n ' )
427
+ output = json .dumps (self .mem_report , indent = 4 )
428
+ if file_desc :
429
+ file_desc .write (output )
430
+ file_desc .write ('\n ' )
431
+
432
+ return output
423
433
424
434
def generate_csv (self , file_desc ):
425
435
"""Generate a CSV file from a memoy map
426
436
427
437
Positional arguments:
428
438
file_desc - the file to write out the final report to
429
439
"""
430
- csv_writer = csv .writer (file_desc , delimiter = ',' ,
440
+ string_io = StringIO ()
441
+ csv_writer = csv .writer (string_io , delimiter = ',' ,
431
442
quoting = csv .QUOTE_MINIMAL )
432
443
433
444
csv_module_section = []
@@ -461,6 +472,11 @@ def generate_csv(self, file_desc):
461
472
csv_writer .writerow (csv_module_section )
462
473
csv_writer .writerow (csv_sizes )
463
474
475
+ if file_desc :
476
+ file_desc .write (string_io .getvalue ())
477
+
478
+ return string_io .getvalue ()
479
+
464
480
def generate_table (self , file_desc ):
465
481
"""Generate a table from a memoy map
466
482
@@ -501,28 +517,32 @@ def generate_table(self, file_desc):
501
517
502
518
table .add_row (subtotal_row )
503
519
504
- file_desc . write ( table .get_string () )
505
- file_desc . write ( '\n ' )
520
+ output = table .get_string ()
521
+ output += '\n '
506
522
507
523
if self .mem_summary ['heap' ] == 0 :
508
- file_desc . write ( "Allocated Heap: unknown\n " )
524
+ output += "Allocated Heap: unknown\n "
509
525
else :
510
- file_desc . write ( "Allocated Heap: %s bytes\n " %
511
- str (self .mem_summary ['heap' ]) )
526
+ output += "Allocated Heap: %s bytes\n " % \
527
+ str (self .mem_summary ['heap' ])
512
528
513
529
if self .mem_summary ['stack' ] == 0 :
514
- file_desc . write ( "Allocated Stack: unknown\n " )
530
+ output += "Allocated Stack: unknown\n "
515
531
else :
516
- file_desc .write ("Allocated Stack: %s bytes\n " %
517
- str (self .mem_summary ['stack' ]))
518
-
519
- file_desc .write ("Total Static RAM memory (data + bss): %s bytes\n " %
520
- (str (self .mem_summary ['static_ram' ])))
521
- file_desc .write (
522
- "Total RAM memory (data + bss + heap + stack): %s bytes\n "
523
- % (str (self .mem_summary ['total_ram' ])))
524
- file_desc .write ("Total Flash memory (text + data + misc): %s bytes\n " %
525
- (str (self .mem_summary ['total_flash' ])))
532
+ output += "Allocated Stack: %s bytes\n " % \
533
+ str (self .mem_summary ['stack' ])
534
+
535
+ output += "Total Static RAM memory (data + bss): %s bytes\n " % \
536
+ str (self .mem_summary ['static_ram' ])
537
+ output += "Total RAM memory (data + bss + heap + stack): %s bytes\n " % \
538
+ str (self .mem_summary ['total_ram' ])
539
+ output += "Total Flash memory (text + data + misc): %s bytes\n " % \
540
+ str (self .mem_summary ['total_flash' ])
541
+
542
+ if file_desc :
543
+ file_desc .write (output )
544
+
545
+ return output
526
546
527
547
toolchains = ["ARM" , "ARM_STD" , "ARM_MICRO" , "GCC_ARM" , "IAR" ]
528
548
0 commit comments