changeset 124:e08b4b09d35f

New parameter treepkg.run.call: extra_env for additional environment variables passed to the subprocess. Also add a test case.
author Bernhard Herzog <bh@intevation.de>
date Thu, 22 May 2008 12:44:43 +0000
parents 37aadd33ffab
children 34e08d52956e
files test/test_run.py treepkg/run.py
diffstat 2 files changed, 28 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/test/test_run.py	Thu May 22 10:40:08 2008 +0000
+++ b/test/test_run.py	Thu May 22 12:44:43 2008 +0000
@@ -28,3 +28,23 @@
             self.assertEquals(exc.returncode, 1)
         else:
             self.fail("call did not raise an exception")
+
+    def test_call_extra_env(self):
+        """Test call with the extra_env parameter"""
+        subprocess_cmd = [sys.executable, "-c",
+                          "import sys, os;"
+                          "value = os.environ.get('TREEPKG_TEST');"
+                          "sys.exit(int(value != 'xyzzy'))"
+                          ]
+        # sanity check that the extra environment variable we use for
+        # the test is not set yet
+        self.assertRaises(SubprocessError, call, subprocess_cmd)
+
+        # the actual test
+        try:
+            call(subprocess_cmd, extra_env=dict(TREEPKG_TEST="xyzzy"))
+        except SubprocessError, exc:
+            self.fail("the extra_env variables were not set properly")
+        else:
+            # test OK
+            pass
--- a/treepkg/run.py	Thu May 22 10:40:08 2008 +0000
+++ b/treepkg/run.py	Thu May 22 12:44:43 2008 +0000
@@ -1,4 +1,4 @@
-# Copyright (C) 2007 by Intevation GmbH
+# Copyright (C) 2007, 2008 by Intevation GmbH
 # Authors:
 # Bernhard Herzog <bh@intevation.de>
 #
@@ -20,7 +20,7 @@
         self.returncode = returncode
 
 
-def call(command, suppress_output=False, **kw):
+def call(command, suppress_output=False, extra_env=None, **kw):
     """Run command as a subprocess and wait until it is finished.
 
     The command should be given as a list of strings to avoid problems
@@ -30,7 +30,12 @@
     if suppress_output:
         kw["stdout"] = open(os.devnull, "w")
         kw["stderr"] = open(os.devnull, "w")
-    ret = subprocess.call(command, **kw)
+    env = kw.pop("env", None)
+    if extra_env:
+        if env is None:
+            env = os.environ.copy()
+        env.update(extra_env)
+    ret = subprocess.call(command, env=env, **kw)
     if ret != 0:
         raise SubprocessError(command, ret)
 
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)