在 Python 中运行另一个脚本而不等待它完成

我正在为用户创建一个小型仪表板,允许他们运行特定作业。我使用 Django,因此我希望他们能够点击一个链接来启动作业,然后返回页面并出现一条消息,提示作业正在运行。作业的结果将在稍后通过电子邮件发送给他们。
在这里插入图片描述

我相信我应该使用 subprocess.Popen,但我对此不确定。所以用伪代码,我想做的是:

if job == 1:
    在后台运行脚本:/path/to/script.py
    返回“作业正在运行”

2、解决方案

您可以使用 subprocess.Popen() 函数在后台运行另一个脚本,而无需等待它完成。此函数将返回一个 subprocess.Popen 对象,该对象表示正在运行的子进程。您可以通过调用 subprocess.Popen() 函数并传递脚本的路径和任何其他所需的参数来创建 subprocess.Popen 对象。

import subprocess

p = subprocess.Popen([sys.executable, '/path/to/script.py'],
                                    stdout=subprocess.PIPE,
                                    stderr=subprocess.STDOUT)

# 继续执行您的代码,无需等待脚本完成

在上面的示例中,我们使用 subprocess.Popen() 函数创建了一个 subprocess.Popen 对象,该对象表示正在运行的脚本。我们将脚本的路径传递给 subprocess.Popen() 函数作为第一个参数。我们还传递了 stdout 和 stderr 参数,以指定子进程的标准输出和标准错误流应重定向到父进程的标准输出流。

您还可以通过调用 subprocess.Popen() 函数并传递一个包含要运行的命令的列表来创建 subprocess.Popen 对象。

import subprocess

p = subprocess.Popen(['ls', '-l', '/path/to/directory'],
                                    stdout=subprocess.PIPE,
                                    stderr=subprocess.STDOUT)

# 继续执行您的代码,无需等待脚本完成

在上面的示例中,我们使用 subprocess.Popen() 函数创建了一个 subprocess.Popen 对象,该对象表示正在运行的命令。我们将命令作为列表传递给 subprocess.Popen() 函数的第一个参数。我们还传递了 stdout 和 stderr 参数,以指定子进程的标准输出和标准错误流应重定向到父进程的标准输出流。

您可以使用 subprocess.Popen() 函数的 communicate() 方法来等待子进程完成并获取其输出。

import subprocess

p = subprocess.Popen(['ls', '-l', '/path/to/directory'],
                                    stdout=subprocess.PIPE,
                                    stderr=subprocess.STDOUT)

output, error = p.communicate()

# 输出子进程的输出和错误
print(output.decode())
print(error.decode())

在上面的示例中,我们使用 subprocess.Popen() 函数创建了一个 subprocess.Popen 对象,该对象表示正在运行的命令。我们将命令作为列表传递给 subprocess.Popen() 函数的第一个参数。我们还传递了 stdout 和 stderr 参数,以指定子进程的标准输出和标准错误流应重定向到父进程的标准输出流。

然后,我们调用 subprocess.Popen() 对象的 communicate() 方法来等待子进程完成并获取其输出。communicate() 方法将阻塞,直到子进程完成。然后,它将返回一个元组,其中包含子进程的标准输出和标准错误流的输出。

您可以使用 subprocess.Popen() 函数在后台运行另一个脚本,而无需等待它完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值