如何在后台不断地运行Python脚本Windows?

How to constantly run Python script in the background on Windows?

我创建了一个脚本,可以将文件从一个文件夹移动到另一个文件夹。 但由于原始文件夹是下载文件夹,所以我需要它始终在后台 运行。

我还有一个标准的批处理文件,看起来像这样:

@py C:\Python\Scripts\moveDLs.py %*

我正在使用 Windows10。我找到了关于如何在批处理文件中使用 nohup 的 Linux 和 OS 的信息。 有Windows版本吗?

如果有需要每次重启或开机都要执行脚本吗?

此外,当您设法使其永久化时如何终止该进程?

非常感谢

在 Windows 上,您可以使用 pythonw.exe 以便 运行 一个 python 脚本作为后台进程:

Python scripts (files with the extension .py) will be executed by python.exe by default. This executable opens a terminal, which stays open even if the program uses a GUI. If you do not want this to happen, use the extension .pyw which will cause the script to be executed by pythonw.exe by default (both executables are located in the top-level of your Python installation directory). This suppresses the terminal window on startup.

例如,

C:\ThanosDodd\Python3.6\pythonw.exe C:\Python\Scripts\moveDLs.py

为了让你的脚本运行连续,你可以使用sched进行事件调度:

The sched module defines a class which implements a general purpose event scheduler

import sched
import time

event_schedule = sched.scheduler(time.time, time.sleep)

def do_something():
    print("Hello, World!")
    event_schedule.enter(30, 1, do_something, (sc,))

event_schedule.enter(30, 1, do_something, (s,))
event_schedule.run()

现在为了终止 Windows 上的后台进程,您只需 运行:

taskkill /pid processId /f

其中 processId 是您要终止的进程的 ID。

一个选择是更改您的脚本,使其旨在 运行 连续而不是重复。只需将整个事情包装在一个 while 循环中并添加一个睡眠。

import time

while True:
   your_script_here
   time.sleep(300)

为了确保它随机器启动并在出现异常时提供自动重启,我建议使用 Non-Sucking Service Manager (www.nssm.cc).这有几个步骤(请参阅文档),但一旦完成,您的脚本将只是另一个 windows 服务,您可以从标准 services.msc 实用程序启动和停止。

我找到了一个有效的解决方案:

import shutil, os, time

while True:
    for filename in os.listdir('folderToMoveFrom'):
        if filename.endswith((desired file extensions)):
            shutil.move( (folderToMoveFrom + filename), folderToMoveTo)
    time.sleep(6)

如果您在没有 time.sleep() 函数的情况下执行上述代码,则由于 'file not found' 错误嵌套在另一个 'file not found' 错误中,程序会在新文件进入文件夹后崩溃。 不知道那是什么,但我对我目前所拥有的感到满意。 您现在唯一需要做的就是将脚本添加到任务计划程序到 Pythonw 下的 运行,以便它作为后台进程运行。或者,您可以 运行 一个批处理文件而不是 运行 脚本,只要您记得为 pythonw 添加适当的指令即可。当然,您只需要启动一次即可。

如果您想要代码在后台持续运行,您需要更改文件扩展名

来自 .py.pyw

在 运行 脚本之前,您需要执行以下操作:

从 CMD(命令提示符)控制台,运行 命令:pip install pythonw

要启动程序 运行 在 CMD 中执行以下命令(在文件所在的文件夹中):pythonw YOUR-FILE.pyw

现在该进程将 运行 在后台持续运行。要停止进程,您必须 运行 命令:

TASKKILL /F /IM pythonw.exe

小心!!!所有命令都是运行来自文件所在文件夹的命令行

如果你想简单地 运行 文件 python YOUR-FILE.pyw,你也可以这样做,但你应该始终保持控制台打开。您可以在命令提示符 (CMD)

中使用 ctrl + C 停止执行

SOURCE HERE: