Fixes Issue #16114: The subprocess module no longer provides a

misleading error message stating that args[0] did not exist when
either the cwd or executable keyword arguments specified a path that
did not exist.
This commit is contained in:
Gregory P. Smith 2012-10-10 03:44:47 -07:00
commit a10ddb8a55
4 changed files with 59 additions and 9 deletions

View file

@ -356,7 +356,7 @@ child_exec(char *const exec_array[],
PyObject *preexec_fn,
PyObject *preexec_fn_args_tuple)
{
int i, saved_errno, unused;
int i, saved_errno, unused, reached_preexec = 0;
PyObject *result;
const char* err_msg = "";
/* Buffer large enough to hold a hex integer. We can't malloc. */
@ -440,6 +440,7 @@ child_exec(char *const exec_array[],
POSIX_CALL(setsid());
#endif
reached_preexec = 1;
if (preexec_fn != Py_None && preexec_fn_args_tuple) {
/* This is where the user has asked us to deadlock their program. */
result = PyObject_Call(preexec_fn, preexec_fn_args_tuple, NULL);
@ -489,6 +490,10 @@ error:
}
unused = write(errpipe_write, cur, hex_errno + sizeof(hex_errno) - cur);
unused = write(errpipe_write, ":", 1);
if (!reached_preexec) {
/* Indicate to the parent that the error happened before exec(). */
unused = write(errpipe_write, "noexec", 6);
}
/* We can't call strerror(saved_errno). It is not async signal safe.
* The parent process will look the error message up. */
} else {