1 from __future__ import absolute_import
7 class FixedArgumentParser(argparse.ArgumentParser):
9 fixes argparse's handling of empty string arguments
10 and changes @filename behaviour to accept multiple arguments on each line
13 def _read_args_from_files(self, arg_strings):
14 # expand arguments referencing files
16 for arg_string in arg_strings:
18 # for regular arguments, just add them back into the list
19 if not arg_string or arg_string[0] not in self.fromfile_prefix_chars:
20 new_arg_strings.append(arg_string)
22 # replace arguments referencing files with the file content
25 args_file = open(arg_string[1:])
28 for arg_line in args_file.read().splitlines():
29 for arg in self.convert_arg_line_to_args(arg_line):
30 arg_strings.append(arg)
31 arg_strings = self._read_args_from_files(arg_strings)
32 new_arg_strings.extend(arg_strings)
36 err = sys.exc_info()[1]
39 # return the modified argument list
40 return new_arg_strings
42 def convert_arg_line_to_args(self, arg_line):
43 return [arg for arg in arg_line.split() if arg.strip()]