2014-06-09 99 views
2

我是一個python新手,需要一些幫助。我正在寫一個python腳本來調用一個應用程序的exe(比如說abc.exe)。我正在使用subprocess.popen來達到這個目的。例如:使用python subprocess.popen ..不能阻止exe停止工作提示

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

這裏CommandLine是:abc.exe -options "<optionstr>"。 abc.exe對我來說是一個黑盒子,它對我傳遞的一些選項產生錯誤提示。錯誤提示是一個標準的Windows提示,說abc.exe已停止工作,給我3個選項來在線檢查解決方案,關閉程序,調試程序。 現在我的問題是:有什麼辦法可以避免這個命令提示符?即有一種方法可以讓python腳本抑制這種提示?

回答

9

This site似乎有解決方案。基本上,它說,這包括在你的腳本開始:

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網站上有page定義多種類型的創建標誌。希望這可以幫助。

+0

上,包括這在我的劇本我得到一個錯誤說 'subprocess_flags = CREATE_NO_WINDOW NameError:名字「CREATE_NO_WINDOW」不是defined' – tejas

+0

我加的定義。 – Samba

+0

感謝它的工作 – tejas