如何让subprocess.Popen启动的Excel在脚本退出后保持运行?
解决方案
要让Excel在脚本结束后保持运行,你需要让Excel进程与父脚本完全分离,避免继承的句柄被关闭导致Excel终止。可以通过设置creationflags参数实现:
方法一:使用DETACHED_PROCESS标志
import subprocess subprocess.Popen( r'C:\Program Files (x86)\Microsoft Office\root\Office16\EXCEL.EXE', creationflags=subprocess.DETACHED_PROCESS, close_fds=True )
方法二:结合CREATE_NO_WINDOW(无额外控制台窗口)
如果你不希望Excel启动时弹出额外的控制台窗口,可以添加CREATE_NO_WINDOW标志:
import subprocess subprocess.Popen( r'C:\Program Files (x86)\Microsoft Office\root\Office16\EXCEL.EXE', creationflags=subprocess.CREATE_NO_WINDOW | subprocess.DETACHED_PROCESS, close_fds=True )
原因说明
脚本中直接调用subprocess.Popen时,Excel会继承父脚本的标准输入、输出和错误句柄。当脚本执行完毕退出,这些句柄被系统关闭,Excel检测到后会自动终止。而交互式shell中,shell进程持续运行,句柄不会关闭,因此Excel能正常保持运行。
DETACHED_PROCESS让新进程脱离父进程的控制台会话,close_fds=True则关闭所有继承的句柄,确保Excel进程不依赖父脚本的生命周期。
内容的提问来源于stack exchange,提问作者Zack
相关产品推荐
相关产品推荐

