繁体   English   中英

如何在Windows后台持续运行Python脚本?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM