2012-05-17 72 views
1

我找到了這個話題,我發現這是一個解決方案:如何在Windows上使用Popen隱藏控制檯?

Module subprocess has no attribute 'STARTF_USESHOWWINDOW'

但是當我運行代碼的現實不同。 :/

  1. 運行我的代碼:

    # Get the environment variables from OO-Python using subprocess 
    oo_py_exec = os.path.join(oo_dir, r'program\python.exe') 
    python_oo_script = ' ;'.join([ 
        "-cimport os", 
        "print(os.environ['URE_BOOTSTRAP'])", 
        "print(os.environ['UNO_PATH'])", 
        "print(os.environ['PATH'])", 
    ]) 
    
    subprocess.STARTF_USESHOWWINDOW 
    info = subprocess.STARTUPINFO() 
    info.dwFlags = subprocess.STARTF_USESHOWWINDOW 
    info.wShowWindow = subprocess.SW_HIDE 
    process = subprocess.Popen([oo_py_exec, python_oo_script], 
        stdout=subprocess.PIPE, startupinfo=info) 
    result = process.communicate() 
    

控制檯顯示。

  • 從鏈接運行代碼:

    kwargs = {} 
    if subprocess.mswindows: 
        su = subprocess.STARTUPINFO() 
        su.dwFlags |= subprocess.STARTF_USESHOWWINDOW 
        su.wShowWindow = subprocess.SW_HIDE 
        kwargs['startupinfo'] = su 
    subprocess.Popen("cmd.exe", **kwargs) 
    
  • 控制檯還顯示!

    Win XP的,PY 2.6

    +1

    如果你沒有啓動一個子進程,顯示控制檯嗎? –

    +0

    難道你不能編寫腳本,以便它可以直接由OO的Python運行嗎? –

    回答

    1

    你不應該使用python.exe而是pythonw.exe - 這些都是相同的,除了一個沒有顯示控制檯,其他沒有(不知道什麼w並代表雖然)。

    +0

    我無法使用pythonw.exe,因爲OpenOffice.org沒有它。 – xliiv

    +3

    我擔心python.exe會用Windows API(也就是'AllocConsole')打開一個控制檯窗口,在這種情況下,據我瞭解'SW_HIDE'是無用的,因爲Windows本身並沒有爲它開始創建一個命令行用。無論如何,我的猜測。 – Voo

    +0

    我找到類似的主題: http://stackoverflow.com/questions/3390762/how-do-i-eliminate-windows-consoles-from-spawned-processes-in-python-2-7 接縫很簡單但仍然沒有工作。 :/ – xliiv

    0

    嘗試添加行: info.wShowWindow = 11 這隱藏了控制檯窗口。 遺留問題: 焦點改變。不知道爲什麼,但假設你運行這個Python代碼,在編輯文檔的同時調用一個.exe文件。沒有樂趣,因爲你的輸入很多時候都會誤入歧途

    +0

    '11'是'SW_FORCEMINIMIZE' – jfs