--- /usr/lib/python3.5/argparse.py 2017-01-19 15:11:04.000000000 +0100 +++ argparse.py 2017-05-21 10:34:13.120282129 +0200 @@ -2030,17 +2030,24 @@ class ArgumentParser(_AttributeHolder, _ # replace arguments referencing files with the file content else: + arg_strings = [] try: with open(arg_string[1:]) as args_file: - arg_strings = [] for arg_line in args_file.read().splitlines(): for arg in self.convert_arg_line_to_args(arg_line): + # make nested includes relative to their parent + if arg.startswith(self.fromfile_prefix_chars): + dirname = _os.path.dirname(arg_string[1:]) + path = _os.path.join(dirname, arg[1:]) + # eliminate ../foo/../foo constructs + path = _os.path.normpath(path) + arg = arg[0] + path arg_strings.append(arg) - arg_strings = self._read_args_from_files(arg_strings) - new_arg_strings.extend(arg_strings) except OSError: err = _sys.exc_info()[1] self.error(str(err)) + arg_strings = self._read_args_from_files(arg_strings) + new_arg_strings.extend(arg_strings) # return the modified argument list return new_arg_strings