Path: csiph.com!fu-berlin.de!uni-berlin.de!not-for-mail From: Chris Angelico Newsgroups: comp.lang.python Subject: Re: Calling the source command from subprocess.popen to update the os.environ. Date: Mon, 28 Mar 2016 01:34:06 +1100 Lines: 46 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 X-Trace: news.uni-berlin.de 89odJm+DidcQUDjwHX1EFwWGQUQQiX/iDYHOjZ7CZxnw== Return-Path: X-Original-To: python-list@python.org Delivered-To: python-list@mail.python.org X-Spam-Status: OK 0.000 X-Spam-Evidence: '*H*': 1.00; '*S*': 0.00; 'received:209.85.223': 0.03; 'skip:" 60': 0.05; 'subject:skip:s 10': 0.05; 'raises': 0.07; 'cc:addr:python-list': 0.09; '22,': 0.09; 'errno': 0.09; 'oserror': 0.09; 'script,': 0.09; 'subject:command': 0.09; 'will,': 0.09; 'bug': 0.10; 'python.': 0.11; 'argument': 0.15; 'properly': 0.15; 'things.': 0.15; '2016': 0.16; 'bash,': 0.16; 'did.': 0.16; 'does;': 0.16; 'env,': 0.16; 'from:addr:rosuav': 0.16; 'from:name:chris angelico': 0.16; 'oserror:': 0.16; 'received:io': 0.16; 'received:psf.io': 0.16; 'unset': 0.16; 'worst': 0.16; 'wrote:': 0.16; 'debugging': 0.18; 'skip:` 20': 0.18; 'try:': 0.18; 'variable': 0.18; 'cc:2**0': 0.20; 'cc:addr:python.org': 0.20; 'skip:" 40': 0.20; '"",': 0.22; 'assuming': 0.22; 'exec': 0.22; 'am,': 0.23; '(most': 0.24; 'header:In-Reply-To:1': 0.24; 'mon,': 0.24; 'script': 0.25; 'message-id:@mail.gmail.com': 0.27; 'var': 0.27; 'subject:update': 0.29; 'environment': 0.29; "i'm": 0.30; 'code': 0.30; "i'd": 0.31; 'error.': 0.31; 'probably': 0.31; "can't": 0.32; 'maybe': 0.33; 'source': 0.33; 'environment,': 0.33; 'traceback': 0.33; 'case,': 0.34; 'file': 0.34; 'except': 0.34; 'received:google.com': 0.35; 'could': 0.35; 'clear': 0.35; 'replace': 0.35; 'problem.': 0.35; 'but': 0.36; 'skip:i 20': 0.36; 'should': 0.36; 'received:209.85': 0.36; 'possible': 0.36; 'subject:: ': 0.37; 'two': 0.37; 'expect': 0.37; 'received:209': 0.38; 'stuff': 0.38; 'anything': 0.38; 'why': 0.39; 'sure': 0.39; 'whatever': 0.39; 'subject:from': 0.39; 'subject:the': 0.39; 'some': 0.40; 'your': 0.60; "you'll": 0.61; 'skip:u 10': 0.61; 'back': 0.62; 'more': 0.63; 'mar': 0.65; 'special': 0.73; 'case?': 0.84; 'chrisa': 0.84; 'first?': 0.84; 'subject:source': 0.84; 'to:none': 0.91; 'sourcing': 0.93 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:cc; bh=m3FgpMPVUJf69X+fhDfokSZ8elhxzekU8iV3MJdOo+I=; b=d/SyBIL+JRpUFTtN97pqswskKfi1EOsii2kP1DZxyn6Q6v5aSDuo5is0c273/yLvOv lS/oPz+4EQ4CoYt5QnqRgpjfoXd60Ik1/pBtrsZqu2UzUWoUvNyNfiKTay7xhdG/wOEI Aql7cqTmbFwXCaYcWqSge5Tr+zXCnHeiVCreywJA0v6qggeBWAoW3ANU8kh7fnRQ7HRQ g5FVxEQ80dBYiv8wFK/FjCKMYHgTFcjY/mF0RuL0wLYGh7AR/4S3B00the/B+07wCGGf RdT/pWeoHUGMZBnK5A2zDKNpoufN+m4X+PSks98Svc6WQu1xk3JZYWla6h70pAq2xMMy M3AA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:cc; bh=m3FgpMPVUJf69X+fhDfokSZ8elhxzekU8iV3MJdOo+I=; b=eQQBm0mep0qs1PswmV2ag3KQUTQeIzC4zh83WlPvV5atKz/cEU9hL46JjDWmMrJCEs ZKq29gv8yEJc2ga+jrepSWxoLzGh4vTG/sxipEWp2r2QJo+Y7aRP42JeUZRZo8Y7qj8Z DPHA99rozovOBBkGFx0Fa3WKqy7BMttvD8BS38myfbK2gzXFQopA90Ax72Ksn2W0Giek AeF1IRb7n1c6O4HNlSq0Q1fCcTjbtm/gWZYMMYBOs9zCaOa6n6XNRfECHz2r4IC1RlYL +bJvCECywqXDcdvOukWmFy4p/VRyeCm2HbFsseRmh3Dd4QoW7JTqlUWDN0SMhEO4ajD8 qKZA== X-Gm-Message-State: AD7BkJLPHGsA67L/W5541xvIa0cOmLjUKq6oyVDItMwWGxOcE+8koGrks0DuoB3rsuUWnXzkdSlQE1I+F4+1lA== X-Received: by 10.107.169.105 with SMTP id s102mr20449503ioe.19.1459089246241; Sun, 27 Mar 2016 07:34:06 -0700 (PDT) In-Reply-To: X-BeenThere: python-list@python.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: General discussion list for the Python programming language List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Xref: csiph.com comp.lang.python:105849 On Mon, Mar 28, 2016 at 12:24 AM, Hongyi Zhao wrote: > # replace env > os.environ.clear() > os.environ.update(line.partition('=')[::2] for line in output.split('\0')) > > Traceback (most recent call last): > File "/home/werner/anaconda2/lib/python2.7/site-packages/IPython/core/ > interactiveshell.py", line 3066, in run_code > exec(code_obj, self.user_global_ns, self.user_ns) > File "", line 10, in > os.environ.clear() > File "/home/werner/anaconda2/lib/python2.7/os.py", line 501, in clear > unsetenv(key) > OSError: [Errno 22] Invalid argument > > If I don't use the `os.environ.clear()' code line, it will work smoothly. Do you need to clear the environment first? Anything that's been overwritten will replace stuff in os.environ, so the only reason to clear it would be if you expect your env script to unset things. Is that the case? I'm not sure why the clear is a problem. Here's how I'd start debugging it: for var in os.environ: try: del os.environ[var] except OSError: print(var) Two possibilities: Either that raises OSError errno 22, same as clear() does; or it doesn't. If it doesn't, you should have a clear env, and all should be working (if a little odd) - and then you can look into the possible bug with clear(). But more likely it will, and then you'll be able to see exactly which key triggered the error. Check out what that key is; maybe there's some kind of special environment variable that can't be cleared?? Worst case, you can always do this "clear whatever you can", and then do your environ.update(). Assuming you never need to clear one of the unclearables, this'll give you the same env update as sourcing the script did. And worst worst case, you could probably exec to bash, source the script, and exec back into Python. That should properly update the environment, but it's a somewhat hamfisted way to go about it :) ChrisA