#!/usr/bin/python2 print """ Variable Grabbler - version 4.0_pre6 ------------------------------------""" ################################################################ # Changes in this version: #=============================================================== # *"\?" in a variable will now be replaced with a simple ? # before processing, remember to double escape that because # json doesn't like \? (=> \\?) # *commands are now not run over and over again if not needed # *files are now not rewritten for each variable individually # *some technical stuff ################################################################ # Exit codes: #=============================================================== # 0 => normal exit # 1 => command line argument error # 2 => error while processing # # definitions import os, json, sys, subprocess def print_err(text): print >> sys.stderr, text if not len(sys.argv)==3: print_err("Error: Exactly two arguments required: \"python variable_grabbler.py \"") sys.exit(1) print "Reading config file...", config_file = open(sys.argv[2],"r") config_values = json.loads(config_file.read().decode("utf-8")) config_file.close() print "Done." print "Reading file: "+sys.argv[1]+"..." file_in = open(sys.argv[1], "r") file_content = file_in.read() file_in.close() print "Replacing variables:" for variable in config_values: print "> "+variable.upper()+" => ", if config_values[variable][0] == "file": print "Found array. Adding file instead: " + config_values[variable][1] file_replacement = open(config_values[variable][1], "r") file_content = file_content.decode('utf-8').replace("%" + variable.upper() + "%", file_replacement.read()).encode('utf-8') file_replacement.close() elif config_values[variable][0] == "exec": print "Found array. Executing command instead: " + config_values[variable][1] if variable.upper() in file_content: process = subprocess.Popen(config_values[variable][1], shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) stdout, stderr = process.communicate() if process.returncode == 0: print "Process exited normally. Replacing variable with the output from STDOUT..." print_err("Subprocess exited normally.\nThe following error messages were produced:") print_err(stderr) file_content = file_content.decode('utf-8').replace("%" + variable.upper() + "%", stdout).encode('utf-8') else: print "Process exited abnormally. Exiting. No changes will be made." print_err("Subprocess exited abnormally. Exiting.\nThe following output was produced:") print_err(stdout) print_err("The following error messages were produced:") print_err(stderr) print "Exiting now." sys.exit(2) else: print variable.upper(), print "was not found in the file. Skipping command execution." else: replacement = str(config_values[variable]) # look for variable sections that contain question marks argument_positions = [] i = 0 while i