3 from sys
import argv, stdout
4 from os
import pathsep, listdir, environ, fdopen
5 from os.path
import exists, isdir, realpath
6 from optparse
import OptionParser, OptionValueError
7 from tempfile
import mkstemp
8 from zipfile
import is_zipfile
12 for p
in path.split(pathsep):
16 if exists(rp)
and ((isdir(rp)
and listdir(rp))
17 or is_zipfile(rp))
and p
not in collected:
21 return pathsep.join(collected)
24 if environ.has_key(varname):
26 if shell ==
"csh" or shell.find(
"csh") != -1 :
27 out.write(
"setenv %s %s\n" % (varname, pth))
28 elif shell ==
"sh" or shell.find(
"sh") != -1 :
29 out.write(
"export %s=%s\n" % (varname, pth))
31 out.write(
"set %s=%s\n" % (varname, pth))
35 if opt_str ==
"--mktemp" :
36 if parser.values.output != stdout :
37 raise OptionValueError(
"--mktemp cannot be used at the same time as --output")
39 parser.values.mktemp =
True
40 fd, outname = mkstemp()
41 parser.values.output = fdopen(fd,
"w")
43 elif opt_str ==
"--output" or opt_str ==
"-o" :
44 if parser.values.mktemp:
45 raise OptionValueError(
"--mktemp cannot be used at the same time as --output")
47 parser.values.output = open(value,
"w")
50 if __name__ ==
'__main__':
52 parser = OptionParser()
54 parser.add_option(
"-e",
"--env",
58 help=
"add environment variable to be processed")
59 parser.add_option(
"--shell", action=
"store", dest=
"shell", type=
"choice", metavar=
"SHELL",
60 choices = [
'csh',
'sh',
'bat'],
61 help=
"select the type of shell to use")
63 parser.set_defaults(output=stdout)
64 parser.add_option(
"-o",
"--output", action=
"callback", metavar=
"FILE",
65 type =
"string", callback = _check_output_options_cb,
66 help=
"(internal) output the command to set up the environment ot the given file instead of stdout")
67 parser.add_option(
"--mktemp", action=
"callback",
69 callback = _check_output_options_cb,
70 help=
"(internal) send the output to a temporary file and print on stdout the file name (like mktemp)")
72 options, args = parser.parse_args()
74 if not options.shell
and environ.has_key(
"SHELL"):
75 options.shell = environ[
"SHELL"]
79 for v
in options.envlist :
def _check_output_options_cb(option, opt_str, value, parser)
def CleanVariable(varname, shell, out)