import sys, re def read(filename): config = {} with open(filename) as fp: for line in fp: line = line.strip() line = re.sub(r'#.*$', '', line) # remove comments found = re.match(r'^([a-zA-Z0-9-_]*)\s*=\s*(.*)$', line) if found: name = found.group(1) value = found.group(2).strip() for other, replacement in config.items(): value = re.sub(r'\$%s\b' % other, str(replacement), value) if value in ['True', 'False']: value = bool(value) else: try: value = int(value) except: try: value = float(value) except: pass config[name] = value return config if __name__ == '__main__': print read(sys.argv[1])