Author: Tobias Pape <tob...@netshed.de> Branch: popen-pclose Changeset: r69706:58405322f403 Date: 2014-03-03 17:54 +0100 http://bitbucket.org/pypy/pypy/changeset/58405322f403/
Log: Provide an exit status for popen'ed RFiles via pclose diff --git a/rpython/rlib/rfile.py b/rpython/rlib/rfile.py --- a/rpython/rlib/rfile.py +++ b/rpython/rlib/rfile.py @@ -116,7 +116,13 @@ rffi.free_nonmovingbuffer(value, ll_value) def close(self): + """ Closes the described file. + +Attention! Unlike Python semantics, `close' does not return `None' upon +success but `0', to be able to return an exit code for popen'ed files """ + ll_f = self.ll_file + res = 0 if ll_f: # double close is allowed self.ll_file = lltype.nullptr(FILE) @@ -124,6 +130,7 @@ if res == -1: errno = rposix.get_errno() raise OSError(errno, os.strerror(errno)) + return os.WEXITSTATUS(res) _do_close = staticmethod(c_close) # overridden in RPopenFile diff --git a/rpython/rlib/test/test_rfile.py b/rpython/rlib/test/test_rfile.py --- a/rpython/rlib/test/test_rfile.py +++ b/rpython/rlib/test/test_rfile.py @@ -196,3 +196,14 @@ s = f.read() f.close() assert s == '42\n' + + def test_pclose(self): + retval = 32 + printval = 42 + cmd = "python -c 'import sys; print %s; sys.exit(%s)'" % ( + printval, retval) + f = rfile.create_popen_file(cmd, "r") + s = f.read() + r = f.close() + assert s == "%s\n" % printval + assert r == retval _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit