有偿找人解决PYTHON定时运行的问题

我用PYTHON做了个定时采集某网站数据的程序,再cmd里运行,只要cmd最小化到托盘,那么程序运行个2-3次就不运行了,需要我在CMD界面输入键盘按键才能又正常运行。但如果我最大化到桌面,置顶了,他就能一直运行。但是这样我就没办法做其他事了。

本作答参考chatgpt:
可以尝试使用Python中的第三方库schedule来实现定时任务。这个库可以在指定的时间间隔或时间点执行函数。

下面是一个使用schedule库的示例代码:


import schedule
import time

def job():
    print("I'm working...")

# 每隔1分钟执行一次job函数
schedule.every(1).minutes.do(job)

while True:
    schedule.run_pending()
    time.sleep(1)

在这个例子中,我们使用了schedule库来每隔1分钟执行一次job函数。通过while循环和sleep函数,我们保持程序的运行,并在每次循环中调用schedule.run_pending()来检查是否有已经到达的任务需要执行。

另外,您还可以考虑使用Python中的第三方库apscheduler来实现更高级的定时任务,该库支持多种定时任务类型,并且可以将任务调度到不同的进程或线程中执行。

希望这些信息能对您有所帮助!

用pyinstaller 打包成exe 试试看

代码呢

用了大家提供的schedule 还是存在这问题。前面两次定时执行,没啥问题。到了17点11分的时候,我看程序不动了,就在CMD页面按了下Q,结果出来的执行时间(每次执行时,我都输出一次时间)是16点54分的。

引用chatGPT作答,这是因为当您最小化 cmd 窗口时,窗口的焦点会丢失,键盘输入也无法被正确地接收。因此,您需要一种解决方案,可以让程序在窗口最小化时继续运行,而无需键盘输入。

一种解决方案是使用 Python 的第三方库,如 pywinauto 或 pyautogui。这些库允许您自动化对窗口和键盘的控制,从而避免在程序运行期间需要手动输入按键。

例如,您可以使用 pyautogui 库的 hotkey 函数来模拟按下和释放键盘上的某些键。您可以在程序的主循环中定期调用该函数,以确保窗口焦点不会丢失。

以下是一个示例代码片段,演示如何使用 pyautogui 库来模拟按下和释放 Ctrl + Alt + Delete 键:

import pyautogui
import time

# 模拟按下和释放 Ctrl + Alt + Delete 键
pyautogui.hotkey('ctrl', 'alt', 'delete')

# 每隔一段时间执行一次
while True:
    # 在这里写你的代码
    time.sleep(60) # 等待60秒

如果您使用的是 pywinauto 库,则可以使用 win32api 模块的 keybd_event 函数来模拟按键事件。以下是一个使用 pywinauto 的示例代码片段:

from pywinauto import Application
import win32api
import win32con
import time

# 打开 cmd 窗口
app = Application().start("cmd.exe")

# 获取 cmd 窗口句柄
hwnd = app.top_window().handle

# 模拟按下和释放 Ctrl + Alt + Delete 键
win32api.keybd_event(win32con.VK_CONTROL, 0, 0, 0)
win32api.keybd_event(win32con.VK_MENU, 0, 0, 0)
win32api.keybd_event(win32con.VK_DELETE, 0, 0, 0)

win32api.keybd_event(win32con.VK_CONTROL, 0, win32con.KEYEVENTF_KEYUP, 0)
win32api.keybd_event(win32con.VK_MENU, 0, win32con.KEYEVENTF_KEYUP, 0)
win32api.keybd_event(win32con.VK_DELETE, 0, win32con.KEYEVENTF_KEYUP, 0)

# 每隔一段时间执行一次
while True:
    # 在这里写你的代码
    time.sleep(60) # 等待60

希望这些解决方案能帮助您解决问题。

如果是我的话,既然需要在cmd中定时运行python程序,那就没有必要在python中写定时函数,直接写一个bat脚本,在bat脚本中写定时处理代码,定时执行py文件即可,这样就不会因为最小化干扰到程序的正常运行,也不需要额外安装其他的库。

bat脚本的定时操作应该不难,很容易就能搜到,执行py文件就直接写 python main.py就可以

用 pythonw 命令后台运行, 参考: https://www.modb.pro/db/484566

以下内容部分参考ChatGPT模型:
我可以给出一些解决问题的思路。

首先,你可以尝试使用Python中的第三方库"schedule",它可以帮助你实现定时运行任务。这个库可以让你以各种方式设置任务,包括设置任务运行的时间间隔、具体时间等等。

另外,你可以尝试使用Python中的"daemon"模块,它可以让你的程序在后台运行,而不会被命令行关闭或最小化。

最后,你也可以尝试使用Python中的"multiprocessing"模块,它可以让你同时运行多个程序,以避免一个程序被关闭或最小化的情况下停止运行。

下面是一些参考代码:

使用schedule库实现定时运行任务:

import schedule
import time

def job():
    print("I'm working...")

schedule.every(10).seconds.do(job)

while True:
    schedule.run_pending()
    time.sleep(1)

使用daemon模块实现后台运行:

import daemon
import time

def do_something():
    while True:
        print("I'm working...")
        time.sleep(1)

with daemon.DaemonContext():
    do_something()

使用multiprocessing模块实现同时运行多个程序:

import multiprocessing
import time

def worker():
    while True:
        print("I'm working...")
        time.sleep(1)

if __name__ == '__main__':
    jobs = []
    for i in range(5):
        p = multiprocessing.Process(target=worker)
        jobs.append(p)
        p.start()

    for j in jobs:
        j.join()

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
你这个问题可能是由于cmd窗口失去焦点时,系统自动将cmd进程降低优先级,导致你的程序被暂停了。你可以通过一些Python库来解决这个问题,如pywin32或pyautogui。

首先,使用pywin32库可以把cmd窗口置顶,并设置为活动窗口:

import win32gui

hwnd = win32gui.GetForegroundWindow()
win32gui.SetWindowPos(hwnd,win32con.HWND_TOPMOST,0,0,0,0,win32con.SWP_NOMOVE|win32con.SWP_NOSIZE)
win32gui.SetForegroundWindow(hwnd)

这个代码将当前窗口设置为置顶和活动窗口。使用这个代码后,当系统将焦点转移到其他窗口时,cmd的进程优先级仍然保持不变。

另外,你可以使用pyautogui模拟一些按键,以便在后台运行时发送热键来保持cmd进程的活动状态。例如:

import pyautogui

# 给cmd窗口发送Alt键
pyautogui.keyDown('alt')
pyautogui.press('tab')
pyautogui.keyUp('alt')

这个代码将发送Alt+Tab键来将焦点从cmd窗口切换到其他窗口,再次按下Alt+Tab键来将焦点切换回cmd。这样,程序就能一直运行了。

最后,你可以将上述代码组合为一个循环,以便程序自动发送按键并保持焦点。如下所示:

while True:
    # 给cmd窗口发送Alt键
    pyautogui.keyDown('alt')
    pyautogui.press('tab')
    pyautogui.keyUp('alt')

    # 休眠1秒钟
    time.sleep(1)

这个代码片段使用一个while循环,在循环中发送Alt+Tab键,并在每次发送后休眠1秒钟,以保持程序的运行。
如果我的回答解决了您的问题,请采纳!

该回答引用ChatGPT
这个问题可能是由于cmd进程被挂起导致的,可能与cmd的窗口焦点以及系统节能模式有关。你可以尝试修改系统设置来解决这个问题,从而让cmd进程一直运行并采集数据。

如果无法通过系统设置解决问题,你可以考虑使用Python的第三方库schedule来进行定时任务的调度和管理,这样不需要依赖cmd进程也可以实现定时执行程序的效果。以下是使用schedule库实现定时任务的部分代码示例:

python
import schedule
import time

def job():
# 在这里编写你的数据采集代码
print("采集数据")

schedule.every(10).minutes.do(job) # 每隔10分钟执行一次job函数

while True:
schedule.run_pending()
time.sleep(1)


这是一个比较简单的例子,你可以根据自己的需求修改定时任务的时间间隔和具体工作内容。注意,使用schedule库时需要保证代码一直运行,不要让程序退出或挂起。

朋友,楼上的这些回答我帮你看了一下,一楼是可以用的,我帮你分析了解一下你更好补充,望采纳谢谢!
一楼使用了Python的schedule模块,用于定时运行一个函数。下面是代码的解释:

导入schedule和time模块。

定义一个名为“job”的函数,用于运行需要定时执行的程序或任务。在这个例子中,我们只是简单地打印一条消息,表示采集数据。

使用schedule模块的.every()方法设置定时器,该方法需要传递两个参数:时间间隔(以整数表示)和时间单位(例如,minutes表示分钟)。在这个例子中,我们将每分钟运行一次job函数。

在while循环中,使用schedule模块的run_pending()方法检查是否有定时任务需要运行,如果有,则运行它们。

在while循环中,使用time模块的sleep()方法使程序暂停一秒钟,以避免过多消耗CPU资源。

请注意,此代码示例只是一个基本示例。如果您要执行更复杂的任务,请相应调整定时器的设置和job函数的实现方式。

该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下。
这个问题可能是由于Cmd窗口失去焦点而导致的,可以尝试使用一些第三方库来实现定时任务,比如APScheduler、schedule等,这些库可以在后台运行,不受Cmd窗口是否失去焦点的影响。
以下是使用APScheduler实现定时任务的示例代码:

from apscheduler.schedulers.blocking import BlockingScheduler

def job():
    print('Hello world!')

if __name__ == '__main__':
    scheduler = BlockingScheduler()
    # 每隔5秒钟执行一次job函数
    scheduler.add_job(job, 'interval', seconds=5)
    scheduler.start()
以上代码定义了一个名为job的函数,它会每隔5秒钟输出一句"Hello world!"。使用BlockingScheduler来运行定时任务,可以保证任务在后台一直运行,不受Cmd窗口是否失去焦点的影响。

你可以根据自己的需求修改job函数和定时任务的执行时间。如果需要在特定的时间点运行任务,可以使用date参数,如:

scheduler.add_job(job, 'date', run_date='2022-05-01 00:00:00')
这将在2022510点整执行job函数。

希望这可以解决你的问题。

如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

一个是窗口丢失可以用其他平台vs或者py写一个聚焦得程序,或者用autohotkey做一个win得小程序,前台线程掉了后台直接就没有了。

看你什么系统,windows和linux都有自己的定时任务,你只需要把要做的任务写好,用系统自带的定时