mirror of https://github.com/python/cpython
Hack for Windows so that if (1) the exit status is nonzero and (2) we
think we have our own DOS box (i.e. we're not started from a command line shell), we print a message and wait for the user to hit a key before the DOS box is closed. The hacky heuristic for determining whether we have our *own* DOS box (due to Mark Hammond) is to test whether we're on line zero...
This commit is contained in:
parent
b6584cac1e
commit
2c1f6be38e
|
@ -101,6 +101,7 @@ Py_IsInitialized()
|
|||
|
||||
*/
|
||||
|
||||
extern void win_pre_init(), win_pre_exit();
|
||||
void
|
||||
Py_Initialize()
|
||||
{
|
||||
|
@ -112,6 +113,9 @@ Py_Initialize()
|
|||
if (initialized)
|
||||
return;
|
||||
initialized = 1;
|
||||
#ifdef MS_WINDOWS
|
||||
win_pre_init();
|
||||
#endif
|
||||
|
||||
if ((p = getenv("PYTHONDEBUG")) && *p != '\0')
|
||||
Py_DebugFlag = 1;
|
||||
|
@ -1096,6 +1100,9 @@ Py_Exit(sts)
|
|||
#ifdef macintosh
|
||||
PyMac_Exit(sts);
|
||||
#else
|
||||
#ifdef MS_WINDOWS
|
||||
win_pre_exit(sts);
|
||||
#endif
|
||||
exit(sts);
|
||||
#endif
|
||||
}
|
||||
|
@ -1160,3 +1167,43 @@ Py_FdIsInteractive(fp, filename)
|
|||
(strcmp(filename, "<stdin>") == 0) ||
|
||||
(strcmp(filename, "???") == 0);
|
||||
}
|
||||
|
||||
#ifdef MS_WINDOWS
|
||||
|
||||
#include <windows.h>
|
||||
#include <conio.h>
|
||||
|
||||
static int its_my_console = -1;
|
||||
|
||||
static void
|
||||
win_pre_init()
|
||||
{
|
||||
HANDLE console;
|
||||
CONSOLE_SCREEN_BUFFER_INFO info;
|
||||
if (its_my_console >= 0)
|
||||
return;
|
||||
its_my_console = 0;
|
||||
console = GetStdHandle(STD_OUTPUT_HANDLE);
|
||||
if (console == INVALID_HANDLE_VALUE)
|
||||
return;
|
||||
if (!GetConsoleScreenBufferInfo(console, &info)) {
|
||||
return;
|
||||
}
|
||||
if (info.dwCursorPosition.Y == 0)
|
||||
its_my_console = 1;
|
||||
}
|
||||
|
||||
static void
|
||||
win_pre_exit(sts)
|
||||
int sts;
|
||||
{
|
||||
if (sts == 0)
|
||||
return;
|
||||
if (its_my_console <= 0)
|
||||
return;
|
||||
fprintf(stderr, "Hit any key to exit...");
|
||||
fflush(stderr);
|
||||
_getch();
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue