You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows平台Python 2.7实现切换目录后启动独立进程(脚本退出不终止子进程)的方案咨询

解决方案:在Windows Python2.7中启动独立子进程

我完全懂你的需求——要在Windows上用Python2.7启动一个不随脚本退出而终止的独立进程,之前的代码导致记事本被终止,核心问题出在Windows的进程控制台继承机制上,咱们来调整参数解决这个问题:

问题根源

在Windows系统中,默认情况下子进程会继承父进程的控制台会话。当你的Python脚本退出时,这个控制台会话会被关闭,所有关联的子进程也会被强制终止。你之前使用的CREATE_NEW_PROCESS_GROUP主要是用于控制台进程的信号控制(比如拦截Ctrl+C),但不足以让子进程完全脱离父进程的生命周期绑定。

正确实现代码

要让子进程完全独立,需要结合脱离控制台和重定向标准流两个操作,Python2.7没有subprocess.DEVNULL,所以我们手动调用系统的nul设备来替代:

import os
import subprocess

# 切换到目标目录
os.chdir('C:/')

# 打开系统nul设备,用于重定向子进程的标准流
nul_handle = open(os.devnull, 'w')

# 启动独立进程:DETACHED_PROCESS让子进程不继承父控制台,重定向所有IO流避免依赖父进程
process = subprocess.Popen(
    "notepad.exe",
    stdin=nul_handle,
    stdout=nul_handle,
    stderr=nul_handle,
    close_fds=True,
    creationflags=0x00000008  # 对应DETACHED_PROCESS标志
)

# 关闭nul设备句柄
nul_handle.close()

# 退出脚本,此时子进程会继续运行
exit()

可选调整

如果你希望子进程拥有自己的独立控制台窗口,可以把creationflags改为0x00000008 | 0x00000010(也就是DETACHED_PROCESS | CREATE_NEW_CONSOLE的组合值),这样记事本会在新窗口中启动,完全独立于脚本的控制台会话。

为什么之前的代码失效

你之前的代码只设置了CREATE_NEW_PROCESS_GROUP和close_fds=True,但子进程依然继承了父脚本的控制台。当脚本退出时,控制台被关闭,导致关联的记事本进程也被终止。加上DETACHED_PROCESS标志和标准流重定向后,子进程就切断了与父进程的所有依赖关联,能够在脚本退出后继续运行。

内容的提问来源于stack exchange,提问作者JimmertyJimmington

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 18:12:43