如何在后台不断地运行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 停止执行
我创建了一个脚本,可以将文件从一个文件夹移动到另一个文件夹。 但由于原始文件夹是下载文件夹,所以我需要它始终在后台 运行。
我还有一个标准的批处理文件,看起来像这样:
@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 bypython.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 bypythonw.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 停止执行