我们将介绍如何在后台运行Python脚本作为后台进程。 我们还将介绍Python中的pythonw。
在自动化和数据科学的世界中,我们已经进步到这样的水平,我们可以轻松地自动化我们的日常任务,并且它们可以在后端处理,甚至不需要更新我们(除非我们对其进行编程来更新我们)。
本文将介绍如何创建脚本并将其作为后台进程运行。
后台进程运行一次,之后,当我们启动计算机时,它们会自动处理,当我们关闭计算机时,它们会停止。
我们还可以通过转到任务管理器或使用 Python 命令根据进程 ID 来终止后台进程。
有两种不同的方法可以将 Python 脚本作为后台进程运行; 一种方法是使用 pythonw,它用于在 Windows 中将 Python 脚本作为后台进程运行。
我们将使用 pythonw 作为后台进程运行 Python 脚本。 Pythonw 用于在不使用终端窗口的情况下运行 Python 脚本。
不使用终端窗口运行任何 Python 脚本的语法如下。
# python
pythonw backgroundprocess.py
我们可以在上面的命令中将backgroundprocess.py替换为我们想要作为后台进程运行的文件名。
要在 Linux 或 Mac 上将 Python 脚本作为后台进程运行,我们在命令末尾使用 & 运算符,这将使其作为后台进程运行。
在 Linux 或 Mac 中将任何 Python 脚本作为后台进程运行的语法如下。
# python
python backgroundprocess.py &
我们可以在上面的命令中将backgroundprocess.py替换为我们想要作为后台进程运行的文件名。
一旦我们的脚本作为后台进程运行,我们就可以检查进程 ID,以便在需要时停止后台进程。 我们可以在Windows中使用以下命令来终止我们刚刚启动的进程。
# python
kill -9 {{process id}}
如果我们想杀死Linux或Mac设备上的进程,我们可以运行以下命令。
# python
kill -9 {{process id}} &
在上面的命令中,-9表示我们要尽快杀死该进程。 因此,使用此命令将终止我们将在大括号内提供其 ID 的进程。
现在,如果我们创建了一个重要的脚本,我们想要检查它的工作方式并获取有关我们作为后台进程运行的脚本的更新,我们可以使用简单的命令将该脚本的输出记录或刷新到另一个文件中 命令。
用于记录后台进程输出的命令如下所示。
# python
pythonw backgroundprocess.py > backgroundlog
如果我们想在 Linux 或 Mac 设备中记录后台进程的输出,我们可以使用以下命令。
# python
python backgroundprocess.py > backgroundlog &
需要注意的一件重要事情是,我们的后台进程生成的输出将首先保存在缓冲存储器中,直到后台进程停止。 因此,只有在停止进程后,我们才能从后台进程获取日志或刷新输出。
但是,如果我们无法停止后台进程,因为它可能会丢失一些数据,该怎么办? 还有另一种方法可以将输出直接记录到文件中,而无需先将其保存在缓冲存储器中。
我们可以使用以下命令。
# python
pythonw -u backgroundprocess.py > backgroundlog
如果我们想直接将输出记录到文件中,我们可以在 Linux 或 Mac 设备上使用此命令,如下所示。
# python
python -u backgroundprocess.py > backgroundlog &
上面的命令现在将直接将输出添加到我们的后台日志文件中。 但我们仍然必须保持终端打开才能获取输出。
如果我们在后台进程完成之前关闭终端,所有进程都将停止。 我们正在运行的所有进程都将被挂起。
Python 总是能为各种问题提供解决方案。 还有另一个称为 nohup 的命令。
该命令确保我们的后台进程完整且不受任何干扰。
即使我们关闭父终端,它仍然会确保我们的后台进程正在运行。 使用 nohup 命令的语法如下所示。
# python
nohup python -u backgroundprocess.py
上面的示例表明我们忘记将输出记录在另一个文件中以便在需要时进行检查。 我们没有忘记 nohup
命令会自动生成日志并将其存储到文件中,以便在后台进程运行时查看所有记录。
nohup
命令会将所有日志存储到 nohup.out 文件中。 如果我们想杀死这个进程,我们可以很容易地使用上面使用的 kill
命令来杀死这个进程。
但是,如果我们不记得要删除的进程的 ID,我们可以使用另一个命令来获取正在作为后台进程运行的文件的名称。 它会找到进程ID并使用 kill
命令来终止该进程。
该命令的语法如下所示。
# python
ps ax | grep backgroundprocess.py