插件窝 干货文章 Python如何后台运行多个外部程序并使其在Python脚本结束后继续执行?

Python如何后台运行多个外部程序并使其在Python脚本结束后继续执行?

subprocess program 程序 使用 82    来源:    2025-03-15

在Python中,如果你想在后台运行多个外部程序,并且希望这些程序在Python脚本结束后继续执行,可以使用以下几种方法:

1. 使用 subprocess.Popen 并设置 detach 参数

subprocess.Popen 是Python中用于启动外部程序的常用方法。通过设置 detach 参数,可以使子进程在父进程结束后继续运行。

import subprocess

# 启动外部程序并使其在后台运行
process1 = subprocess.Popen(['your_program1'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE, start_new_session=True)
process2 = subprocess.Popen(['your_program2'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE, start_new_session=True)

# 如果你不需要等待子进程完成,可以直接退出脚本

2. 使用 nohup 命令(适用于Unix/Linux系统)

nohup 是一个Unix/Linux命令,用于在后台运行程序,并且忽略挂断信号(SIGHUP),从而使程序在终端关闭后继续运行。

import subprocess

# 使用 nohup 启动外部程序
subprocess.Popen(['nohup', 'your_program1', '&'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
subprocess.Popen(['nohup', 'your_program2', '&'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)

3. 使用 start 命令(适用于Windows系统)

在Windows系统中,可以使用 start 命令来启动外部程序并使其在后台运行。

import subprocess

# 使用 start 启动外部程序
subprocess.Popen(['start', 'your_program1'], shell=True)
subprocess.Popen(['start', 'your_program2'], shell=True)

4. 使用 os.spawnlos.spawnlp

os.spawnlos.spawnlp 也可以用于启动外部程序,并且可以通过设置 os.P_DETACHos.P_NOWAIT 参数使程序在后台运行。

import os

# 使用 os.spawnl 启动外部程序
os.spawnl(os.P_DETACH, 'your_program1')
os.spawnl(os.P_DETACH, 'your_program2')

5. 使用 multiprocessing 模块

如果你需要在Python脚本中并行运行多个外部程序,可以使用 multiprocessing 模块。

import multiprocessing
import subprocess

def run_program(program):
    subprocess.Popen(program, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE, start_new_session=True)

if __name__ == '__main__':
    programs = [['your_program1'], ['your_program2']]
    processes = []

    for program in programs:
        p = multiprocessing.Process(target=run_program, args=(program,))
        p.start()
        processes.append(p)

    # 如果你不需要等待子进程完成,可以直接退出脚本

总结

  • Unix/Linux系统:推荐使用 nohupsubprocess.Popen 并设置 start_new_session=True
  • Windows系统:推荐使用 start 命令或 subprocess.Popen 并设置 shell=True

无论使用哪种方法,都可以确保外部程序在Python脚本结束后继续运行。