[英]How to constantly run Python script in the background on Windows?
我创建了一个脚本,可以将文件从一个文件夹移动到另一个文件夹。 但由于原始文件夹是 Downloads 文件夹,我需要它始终在后台运行。
我还有一个标准的批处理文件,看起来像这样:
@py C:\\Python\Scripts\moveDLs.py %*
我正在使用Windows 10 。 我找到了 Linux 的信息和关于如何在批处理文件中使用nohup
的操作系统。 有Windows版本吗?
如果有,每次重启或开机都要执行脚本吗?
另外,当您设法使其永久化时,如何终止该过程?
非常感谢
在 Windows 上,您可以使用pythonw.exe
将 python 脚本作为后台进程运行:
默认情况下,Python 脚本(扩展名为
.py
文件)将由python.exe
执行。 此可执行文件会打开一个终端,即使程序使用 GUI,该终端也会保持打开状态。 如果您不希望发生这种情况,请使用扩展名.pyw
,这将导致脚本默认由pythonw.exe
执行(两个可执行文件都位于 Python 安装目录的顶层)。 这会在启动时抑制终端窗口。
例如,
C:\ThanosDodd\Python3.6\pythonw.exe C:\\Python\Scripts\moveDLs.py
为了让你的脚本持续运行,你可以使用sched
进行事件调度:
sched 模块定义了一个实现通用事件调度器的类
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 服务。 有几个步骤(请参阅文档)但是一旦完成,您的脚本将只是另一个 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() 函数的情况下执行上述代码,则由于“找不到文件”错误嵌套在另一个“未找到文件”错误中,新文件进入文件夹后程序会崩溃。 不知道那是什么,但我对我目前所拥有的感到满意。 您现在唯一需要做的就是将脚本添加到 Task Scheduler 以在 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停止执行
我想创建一个快捷键,只要 PC 打开,我就可以使用它。 我不想使用while True
所以我这样做了
import keyboard as k
k.add_hotkey("alt+s", lambda: k.write('Hello'))
k.wait('ctrl+shift+1') #this is a combo that I know I don't use so the program keeps running
然后把python文件放到C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.