00050 :
00051 from optparse import OptionParser
00052 parser = OptionParser(prog = "env",
00053 usage = "Usage: %prog [OPTION]... [NAME=VALUE]... [COMMAND [ARG]...]",
00054 description = "Set each NAME to VALUE in the environment and run COMMAND.",
00055 epilog = "The operations are performed in the order: unset, set, append, "
00056 "prepend. If no COMMAND, print the resulting environment." )
00057 parser.add_option("-i", "--ignore-environment",
00058 action = "store_true",
00059 help = "start with an empty environment")
00060 parser.add_option("-u", "--unset",
00061 metavar = "NAME",
00062 action = "append",
00063 help = "remove variable from the environment")
00064 parser.add_option("-s", "--set",
00065 metavar = "NAME=VALUE",
00066 action = "append",
00067 help = "set the variable NAME to VALUE")
00068 parser.add_option("-a", "--append",
00069 metavar = "NAME=VALUE",
00070 action = "append",
00071 help = "append VALUE to the variable NAME (with a '%s' as separator)" % os.pathsep)
00072 parser.add_option("-p", "--prepend",
00073 metavar = "NAME=VALUE",
00074 action = "append",
00075 help = "prepend VALUE to the variable NAME (with a '%s' as separator)" % os.pathsep)
00076 parser.add_option("-x", "--xml",
00077 action = "append",
00078 help = "XML file describing the changes to the environment")
00079 parser.disable_interspersed_args()
00080 parser.set_defaults(unset = [],
00081 set = [],
00082 append = [],
00083 prepend = [],
00084 xml = [],
00085 ignore_environment = False)
00086
00087 opts, args = parser.parse_args()
00088
00089
00090 i = 0
00091 argc = len(args)
00092 while (i < argc) and ("=" in args[i]):
00093 i += 1
00094 opts.set.extend(args[:i])
00095 cmd = args[i:]
00096
00097
00098 if opts.ignore_environment:
00099 env = {}
00100 else:
00101 env = dict(os.environ)
00102
00103 if opts.xml:
00104 from EnvConfig import Control
00105 control = Control.Environment()
00106
00107 for v in env:
00108 control.declare(v, ("PATH" in v or "DIRS" in v) and "list" or "scalar", False)
00109 for k in env:
00110 control.set(k, env[k])
00111
00112 for f in opts.xml:
00113 control.loadXML(f)
00114 env = control.vars()
00115
00116 env = set_env(env,
00117 set = opts.set, unset = opts.unset,
00118 append = opts.append, prepend = opts.prepend)
00119
00120 if not cmd:
00121 for nv in env.items():
00122 print "%s=%s" % nv
00123 return 0
00124 else:
00125 from subprocess import Popen
00126 return Popen(cmd, env = env).wait()