diff --git a/Doc/library/os.rst b/Doc/library/os.rst index c62a00db7a2..06f6b7f6b67 100644 --- a/Doc/library/os.rst +++ b/Doc/library/os.rst @@ -1019,11 +1019,11 @@ as internal buffering of data. Availability: Unix, Windows. -.. function:: pipe2(flags=0) +.. function:: pipe2(flags) Create a pipe with *flags* set atomically. - *flags* is optional and can be constructed by ORing together zero or more of - these values: :data:`O_NONBLOCK`, :data:`O_CLOEXEC`. + *flags* can be constructed by ORing together one or more of these values: + :data:`O_NONBLOCK`, :data:`O_CLOEXEC`. Return a pair of file descriptors ``(r, w)`` usable for reading and writing, respectively. diff --git a/Lib/test/test_posix.py b/Lib/test/test_posix.py index 421ea68776b..70a47b02f42 100644 --- a/Lib/test/test_posix.py +++ b/Lib/test/test_posix.py @@ -481,8 +481,8 @@ class PosixTester(unittest.TestCase): self.assertRaises(TypeError, os.pipe2, 'DEADBEEF') self.assertRaises(TypeError, os.pipe2, 0, 0) - # try calling without flag, like os.pipe() - r, w = os.pipe2() + # try calling with flags = 0, like os.pipe() + r, w = os.pipe2(0) os.close(r) os.close(w) diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index e529afdb350..acc420fd042 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -6549,20 +6549,21 @@ posix_pipe(PyObject *self, PyObject *noargs) #ifdef HAVE_PIPE2 PyDoc_STRVAR(posix_pipe2__doc__, -"pipe2(flags=0) -> (read_end, write_end)\n\n\ -Create a pipe with flags set atomically.\ -flags is optional and can be constructed by ORing together zero or more\n\ -of these values: O_NONBLOCK, O_CLOEXEC.\n\ +"pipe2(flags) -> (read_end, write_end)\n\n\ +Create a pipe with flags set atomically.\n\ +flags can be constructed by ORing together one or more of these values:\n\ +O_NONBLOCK, O_CLOEXEC.\n\ "); static PyObject * -posix_pipe2(PyObject *self, PyObject *args) +posix_pipe2(PyObject *self, PyObject *arg) { - int flags = 0; + int flags; int fds[2]; int res; - if (!PyArg_ParseTuple(args, "|i:pipe2", &flags)) + flags = PyLong_AsLong(arg); + if (flags == -1 && PyErr_Occurred()) return NULL; res = pipe2(fds, flags); @@ -9467,7 +9468,7 @@ static PyMethodDef posix_methods[] = { {"pipe", posix_pipe, METH_NOARGS, posix_pipe__doc__}, #endif #ifdef HAVE_PIPE2 - {"pipe2", posix_pipe2, METH_VARARGS, posix_pipe2__doc__}, + {"pipe2", posix_pipe2, METH_O, posix_pipe2__doc__}, #endif #ifdef HAVE_MKFIFO {"mkfifo", posix_mkfifo, METH_VARARGS, posix_mkfifo__doc__},