Python中如何实现调用批处理后让Python退出而批处理继续运行?

windows 环境,想让 python 退出之后批处理继续执行,应该怎么操作,跪求指点。
Python中如何实现调用批处理后让Python退出而批处理继续运行?

4 回复

用 subprocess.Popen 应该可以

<br>import subprocess<br>subprocess.Popen(cmd, shell=True)<br>


subprocess.Popen 就行,关键是把 creationflags 参数设置好。在Windows上,得用 CREATE_NEW_CONSOLE 这个标志,它能给批处理开个新窗口,这样Python脚本退出了,批处理还能接着跑。

给你个例子,比如要运行 my_script.bat

import subprocess
import sys

# 批处理文件的路径
bat_file = "my_script.bat"

try:
    # 关键在这里:creationflags=subprocess.CREATE_NEW_CONSOLE
    process = subprocess.Popen(
        [bat_file],
        creationflags=subprocess.CREATE_NEW_CONSOLE
    )
    # 这里不调用 process.wait(),直接让Python退出
    print(f"已启动批处理,PID: {process.pid}")
    sys.exit(0)  # 或者直接让脚本自然结束
except FileNotFoundError:
    print(f"错误:找不到文件 '{bat_file}'")
except Exception as e:
    print(f"启动批处理时出错: {e}")

原理CREATE_NEW_CONSOLE 会让系统为批处理单独创建一个控制台窗口。Python进程和这个新控制台进程是分开的,所以Python退出了,新窗口里的批处理照样执行。

注意:这个标志只在Windows好使。如果是Linux/macOS,思路类似,但方法不同,通常用 nohup 或者让进程在后台跑。

一句话建议:用 subprocess.PopenCREATE_NEW_CONSOLE 标志实现分离。

不清楚,我每次运行 ffmpeg 时,python 退出,还在运行

<br>import signal<br><br>signal.signal(signal.SIGINT, handler)<br>

我不知道 Windows 支不支持信号, 那个 handler 是一个函数,函数里面写上 Python 退出之后你想执行的代码.

回到顶部