[pypy-svn] r35225 - in pypy/dist/pypy/module/posix: . test
fijal at codespeak.net
fijal at codespeak.net
Sun Dec 3 20:35:43 CET 2006
Author: fijal
Date: Sun Dec 3 20:35:39 2006
New Revision: 35225
Modified:
pypy/dist/pypy/module/posix/__init__.py
pypy/dist/pypy/module/posix/interp_posix.py
pypy/dist/pypy/module/posix/test/test_posix2.py
Log:
Added execve (module level) and test for it.
Modified: pypy/dist/pypy/module/posix/__init__.py
==============================================================================
--- pypy/dist/pypy/module/posix/__init__.py (original)
+++ pypy/dist/pypy/module/posix/__init__.py Sun Dec 3 20:35:39 2006
@@ -72,6 +72,8 @@
interpleveldefs['waitpid'] = 'interp_posix.waitpid'
if hasattr(os, 'execv'):
interpleveldefs['execv'] = 'interp_posix.execv'
+ if hasattr(os, 'execve'):
+ interpleveldefs['execve'] = 'interp_posix.execve'
#if hasattr(ctypes_posix, 'uname'):
# interpleveldefs['uname'] = 'interp_posix.uname'
Modified: pypy/dist/pypy/module/posix/interp_posix.py
==============================================================================
--- pypy/dist/pypy/module/posix/interp_posix.py (original)
+++ pypy/dist/pypy/module/posix/interp_posix.py Sun Dec 3 20:35:39 2006
@@ -399,9 +399,27 @@
geteuid.unwrap_spec = [ObjSpace]
def execv(space, command, w_args):
- os.execv(command, [space.str_w(i) for i in space.unpackiterable(w_args)])
+ try:
+ os.execv(command, [space.str_w(i) for i in space.unpackiterable(w_args)])
+ except OSError, e:
+ raise wrap_oserror(space, e)
execv.unwrap_spec = [ObjSpace, str, W_Root]
+def execve(space, command, w_args, w_env):
+ try:
+ args = [space.str_w(i) for i in space.unpackiterable(w_args)]
+ env = {}
+ keys = space.call_function(space.getattr(w_env, space.wrap('keys')))
+ for key in space.unpackiterable(keys):
+ value = space.getitem(w_env, key)
+ env[space.str_w(key)] = space.str_w(value)
+ os.execve(command, args, env)
+ except ValueError, e:
+ raise OperationError(space.w_ValueError, space.wrap(str(e)))
+ except OSError, e:
+ raise wrap_oserror(space, e)
+execve.unwrap_spec = [ObjSpace, str, W_Root, W_Root]
+
def uname(space):
try:
result = _c.uname()
Modified: pypy/dist/pypy/module/posix/test/test_posix2.py
==============================================================================
--- pypy/dist/pypy/module/posix/test/test_posix2.py (original)
+++ pypy/dist/pypy/module/posix/test/test_posix2.py Sun Dec 3 20:35:39 2006
@@ -110,6 +110,26 @@
os.waitpid(pid, 0)
assert open("onefile").read() == "1"
os.unlink("onefile")
+
+ def test_execv_raising(self):
+ os = self.posix
+ raises(OSError, 'os.execv("saddsadsadsadsa", ["saddsadsasaddsa"])')
+
+ def test_execve(self):
+ os = self.posix
+ pid = os.fork()
+ if pid == 0:
+ os.execve("/usr/bin/env", ["env", "python", "-c", "import os; open('onefile', 'w').write(os.environ['ddd'])"], {'ddd':'xxx'})
+ os.waitpid(pid, 0)
+ assert open("onefile").read() == "xxx"
+ os.unlink("onefile")
+
+ if hasattr(__import__(os.name), 'popen'):
+ def test_popen(self):
+ skip("Not implemented")
+ os = self.posix
+ stream = os.popen('echo 1')
+ assert stream.read() == '1\n'
class AppTestEnvironment(object):
def setup_class(cls):
More information about the pypy-svn
mailing list