- added popen.popen2/popen3/popen4 support for

windows.

- added optional mode argument to popen2/popen3
  for unix; if the second argument is an integer,
  it's assumed to be the buffer size.

- changed nt.popen2/popen3/popen4 return values
  to match the popen2 module (stdout first, not
  stdin).
This commit is contained in:
Fredrik Lundh 2000-07-09 17:59:32 +00:00
parent 766ccdcf18
commit bb7eeff44a
2 changed files with 46 additions and 22 deletions

View file

@ -2149,12 +2149,12 @@ static PyObject *_PyPopen(char *, int, int);
static PyObject *
posix_popen(PyObject *self, PyObject *args)
{
int bufsize = -1;
PyObject *f, *s;
int tm = 0;
char *cmdstring;
char *mode = "r";
int bufsize = -1;
if (!PyArg_ParseTuple(args, "s|si:popen", &cmdstring, &mode, &bufsize))
return NULL;
@ -2174,9 +2174,9 @@ posix_popen(PyObject *self, PyObject *args)
}
if (*(mode+1) == 't')
f = _PyPopen(cmdstring, tm | _O_TEXT , POPEN_1);
f = _PyPopen(cmdstring, tm | _O_TEXT, POPEN_1);
else if (*(mode+1) == 'b')
f = _PyPopen(cmdstring, tm | _O_BINARY , POPEN_1);
f = _PyPopen(cmdstring, tm | _O_BINARY, POPEN_1);
else
f = _PyPopen(cmdstring, tm | _O_TEXT, POPEN_1);
@ -2221,9 +2221,9 @@ win32_popen2(PyObject *self, PyObject *args)
/*
* Variation on <om win32pipe.popen>
*
* The result of this function is 3 pipes - the process's stdin,
* stdout and stderr
*
*/
static PyObject *
@ -2288,7 +2288,7 @@ win32_popen4(PyObject *self, PyObject *args)
return NULL;
}
f = _PyPopen(cmdstring, tm , POPEN_4);
f = _PyPopen(cmdstring, tm, POPEN_4);
return f;
}
@ -2516,7 +2516,7 @@ _PyPopen(char *cmdstring, int mode, int n)
if (n != 4)
CloseHandle(hChildStderrRdDup);
f = Py_BuildValue("OO",p1,p2);
f = Py_BuildValue("OO",p2,p1);
break;
}
@ -2545,7 +2545,7 @@ _PyPopen(char *cmdstring, int mode, int n)
PyFile_SetBufSize(p1, 0);
PyFile_SetBufSize(p2, 0);
PyFile_SetBufSize(p3, 0);
f = Py_BuildValue("OOO",p1,p2,p3);
f = Py_BuildValue("OOO",p2,p1,p3);
break;
}
}