使用Python subprocess.popen,无法防止exe停止工作提示
我是一名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网站上有一个页面,上面定义了很多种创建标志。希望这对你有帮助。