我正在編寫一個小應用程序,它只需按幾下按鈕就可以使用「索引文件」在資源管理器中打開文件夾。無論如何,我想在每次關閉應用程序時在「後臺進程」中更新該索引文件。更新索引文件意味着通過我們的網絡進行掃描,對於一些遠程用戶,這可能需要幾分鐘的時間。這就是爲什麼我希望它在掃描過程中隱藏控制檯,以避免進程被用戶中止。進程正在運行時關閉控制檯
我試過類似幾件事情:
#these are just dummy lines
path = get_user_input()
subprocess.Popen(r'explorer "%s"' % path)
#Here I start my update process
multiprocessing.Process(target=update_index).start()
#end of script, now I want that process to continue until finished while main console closes. I only seem to get one or the other.
我使用也試過:
DETACHED_PROCESS = 0x00000008
CREATE_NO_WINDOW = 0x08000000
subprocess.Popen(command, shell=True, stdin=None, stdout=None,
stderr=None,
creationflags=DETACHED_PROCESS|CREATE_NO_WINDOW)
,並得到了一個單獨的控制檯窗口,但仍然沒有從防止用戶進行逼搶的方式處理。
另外請記住,我想分發這個腳本的東西像py2exe以後讓它可以訪問那些沒有Python,所以我想用pythonw.exe是沒有問題的。要麼?
腳本通常應該有一個控制檯嗎?如果沒有,請使用與pythonw.exe一起運行的.pyw文件。 – eryksun
順便說一句,如果您也使用'DETACHED_PROCESS',則忽略'CREATE_NO_WINDOW',因爲將它們合併是沒有意義的。 'DETACHED_PROCESS'對於在沒有控制檯的情況下運行控制檯應用程序是有意義的,前提是它不會生成子控制檯進程,因爲它們只會創建自己的控制檯窗口。有了這個標誌,你還應該將標準句柄重定向到'NUL'設備。 'CREATE_NO_WINDOW'適用於子進程,因爲它們將繼承無窗口控制檯。同樣,您可以使用'STARTUPINFO'來隱藏控制檯窗口。 – eryksun
是的腳本通常應該有一個控制檯,因爲在第一部分用戶我提出了兩個問題來回答。至少這就是現在這樣做的方式,有可能是在除了控制檯之外的其他窗口中提出這些問題,當我回到辦公室時我會嘗試。關於子進程方法的標誌,我沒有太多的線索,他們是如何工作的我只是用google搜索到了那些並嘗試了不同的組合,謝謝讓我詳細介紹一下這些細節! – Saftblandaren