【问题标题】:how to get a subprocess to not get stuck if application crashes?如果应用程序崩溃,如何让子进程不卡住?
【发布时间】:2018-05-19 11:02:26
【问题描述】:

我正在一个接一个地启动一系列子流程,比如

for variables in my_list:
    proc = subprocess.Popen(**variables)
    proc.wait()

但是,如果其中一个崩溃,Windows 会弹出一个窗口,提示该程序已停止工作;由于该进程还没有被杀死,程序一直等到我点击“关闭程序”按钮

我想知道是否有办法告诉 Python 在没有 UI 的情况下打开这个进程,或者让它在崩溃时不会弹出错误报告。该文档似乎没有解决任何这些问题。

我使用的是 python 2.7,所以我无法使用 python 3 中存在的timeout 标志。

【问题讨论】:

    标签: python windows python-2.7 subprocess


    【解决方案1】:

    错误模式由子进程继承。通过 ctypes 设置它。例如:

    import ctypes
    kernel32 = ctypes.WinDLL('kernel32', use_last_error=True)
    
    SEM_FAILCRITICALERRORS = 1
    SEM_NOGPFAULTERRORBOX = 2
    
    prev_error_mode = kernel32.SetErrorMode(SEM_FAILCRITICALERRORS | 
                        SEM_NOGPFAULTERRORBOX)
    

    【讨论】:

      猜你喜欢
      • 2021-03-28
      • 1970-01-01
      • 2012-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-29
      • 1970-01-01
      • 2021-12-08
      相关资源
      最近更新 更多