Roumen Petrov added the comment:

Hi Ned,

> Ned Jackson Lovely added the comment:
[SNIP]
> In both cases, the currently running python executable, fetched via 
> sys.executable and run using os.popen, is used to print the value, instead of 
> the shell's echo. This moves things closer towards cross-platform niceness, 
> and removes the dependency on /bin/sh.
>
> Unfortunately, I don't have a Windows machine readily available to test this 
> on. Could apply your preferred patch, run it for me, and let me know if you 
> have any problems?

$ uname -a
MINGW32_NT-5.1 QEMU 1.0.18(0.48/3/2) 2012-11-21 22:34 i686 Msys
---
Python 3.4.0a0 (default, Mar 20 2013, 00:32:43)
[GCC 4.7.2] on win32
---
$ cat ...test_os.py
....
     # Bug 1110478
     def test_update2(self):
         minimal_environ_keys = ('COMSPEC', 'PATH',)
         minimal_environ = {k:os.environ[k] for k in minimal_environ_keys
                             if k in os.environ}
         os.environ.clear()
         os.environ.update(HELLO="World")
         minimal_environ['HELLO'] = "World"
         os.environ.update(minimal_environ)
         python_cmd = "{0} -c \"import os;print(os.environ['HELLO'])\""
         with os.popen(python_cmd.format(sys.executable)) as popen:
             value = popen.read().strip()
             self.assertEqual(value, "World")

     # Bug 1110478
     def test_update3(self):
         self.assertTrue('HELLO' not in os.environ)
         os.environ.update(HELLO="World")
         python_cmd = "{0} -c \"import os;print(os.environ['HELLO'])\""
         with os.popen(python_cmd.format(sys.executable)) as popen:
             value = popen.read().strip()
             self.assertEqual(value, "World")

     @unittest.skipUnless(os.path.exists('/bin/sh'), 'requires /bin/sh')
     def test_os_popen_iter(self):
         with os.popen(
             "/bin/sh -c 'echo \"line1\nline2\nline3\"'") as popen:
             it = iter(popen)
             self.assertEqual(next(it), "line1\n")
             self.assertEqual(next(it), "line2\n")
             self.assertEqual(next(it), "line3\n")
             self.assertRaises(StopIteration, next, it)
....

result:
....
test_update (test.test_os.EnvironTests) ... ok
test_update2 (test.test_os.EnvironTests) ... ok
test_update3 (test.test_os.EnvironTests) ... ok
test_values (test.test_os.EnvironTests) ... ok
....

So with both (take2&take3) updates tests pass. Should work with MSVC builds.

May be test_os_popen_iter could be updated .

> Regards,
>
> Ned

----------
nosy: +rpetrov

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue5051>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to