使用Python subprocess.popen,无法防止exe停止工作提示

3 投票
1 回答
2728 浏览
提问于 2025-04-18 09:13

我是一名Python新手,需要一些帮助。我正在写一个Python脚本来调用一个应用程序的可执行文件(比如说abc.exe)。为此,我使用了subprocess.popen。举个例子:

r_stdout = subprocess.Popen(CommandLine,
                                  stdout = subprocess.PIPE,
                                  stderr = subprocess.PIPE).communicate()[1]

这里的CommandLine是:abc.exe -options "<optionstr>"。对我来说,abc.exe就像一个黑箱,我传递的一些选项导致它出现错误提示。这个错误提示是一个标准的Windows提示,告诉我abc.exe已经停止工作,并给我三个选项:在线查找解决方案、关闭程序、调试程序。

现在我的问题是:有没有办法避免这个命令提示框?也就是说,有没有办法让Python脚本不显示这个提示框?

1 个回答

14

这个网站似乎提供了解决方案。简单来说,它建议在你的脚本开头加上这段代码:

if sys.platform.startswith("win"):
    # Don't display the Windows GPF dialog if the invoked program dies.
    # See comp.os.ms-windows.programmer.win32
    #  How to suppress crash notification dialog?, Jan 14,2004 -
    #     Raymond Chen's response [1]

    import ctypes
    SEM_NOGPFAULTERRORBOX = 0x0002 # From MSDN
    ctypes.windll.kernel32.SetErrorMode(SEM_NOGPFAULTERRORBOX);
    CREATE_NO_WINDOW = 0x08000000    # From Windows API
    subprocess_flags = CREATE_NO_WINDOW
else:
    subprocess_flags = 0

然后,你可以这样执行你的子进程:

r_stdout = subprocess.Popen(CommandLine,
                            stdout=subprocess.PIPE,
                            stderr=subprocess.PIPE,
                            creationflags=subprocess_flags).communicate()[1]

MSDN网站上有一个页面,上面定义了很多种创建标志。希望这对你有帮助。

撰写回答