簡體   English   中英

python運行外部程序並獨立執行

[英]python run external program and continue its execution indepentently

如何在我的python腳本中運行一個外部程序(例如“ Firefox”),並確保在我的python腳本終止后其進程仍然有效? 如果可行,我想使其跨平台。

僅stdlib沒有跨平台的方法可以做到這一點。 但是,如果您為POSIX和Windows編寫代碼,通常就足夠了,對嗎?

在Windows上,您要傳遞creationflags參數。 閱讀文檔(在那里和在MSDN上 ),並確定是要控制台分離的進程,新控制台的進程還是新進程組的進程,然后使用適當的標志。 您可能還需要在startupinfo設置一些標志; 再次, MSDN將告訴您它們的含義。

在POSIX上,如果您只想要最簡單的行為,並且正在使用3.2+,則需要傳遞start_new_session=True 在較早的Python版本中,或者在其他情況下,您希望傳遞一個preexec_fn ,它允許您執行所需的任何守護程序。 可能只有os.setsid()start_new_session做什么),或者更多。 請參閱PEP 3143-標准守護進程進程庫 ,以獲取有關您可能要在此處執行的所有不同操作的討論。

因此,最簡單的版本是:

def launch_in_background(args):
    try:
        subprocess.CREATE_NEW_PROCESS_GROUP
    except AttributeError:
        # not Windows, so assume POSIX; if not, we'll get a usable exception
        p = subprocess.Popen(args, start_new_session=True)
    else:
        # Windows
        p = subprocess.Popen(args, creationflags=subprocess.CREATE_NEW_PROCESS_GROUP)

如果您願意使用stdlib,那么這里有數十種“ shell類型功能”庫,其中許多具有某種“分離”功能。 只需在PyPI上搜索shellclisubprocess進程,然后找到最喜歡的一個即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM