[英]Run Python HTTPServer in Background and Continue Script Execution
[英]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上搜索shell
, cli
或subprocess
進程,然后找到最喜歡的一個即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.