当前位置: 首页 > 知识库问答 >
问题:

Python:如何恢复Python脚本的执行?

郭兴平
2023-03-14

我有以下代码,它在while循环中不断检查当前时间,当它最终匹配定义的time\u时,就会在if语句中运行代码。

此外,欢迎提出任何改进建议。

提前感谢您!

共有2个答案

程英资
2023-03-14

您所要求的是不可能的(所有操作都会在睡眠模式下停止执行)。

您可以做的是在PC重新打开和启动时标记您的文件以恢复。关于这个问题有一些很好的答案:

  1. 如何在启动时运行shell脚本(Linux)
  2. 每次计算机从Hibernate状态唤醒时(再次运行Linux)都运行python脚本
  3. 如何在Windows启动时启动python文件?(Windows)
  4. https://www.reddit.com/r/Python/comments/30br3e/is_it_possible_to_execute_a_python_script_each/?sort=top(再次打开Windows)

对于Linux情况:

  • 在路径上添加python脚本

对于唤醒恢复情况:

>

  • 找到/usr/lib/pm-utils/睡眠. d,或/etc/pm/睡眠. d(以在您的系统中工作的为准-亲自使用的首选)

    在其中添加一个脚本,如下所示:

    myWakeupScript

    #!/bin/sh
    
    case "$1" in
        resume)
            python path/to/your_script.py
    esac
    

    使脚本可执行:chmod x/usr/lib/pm-utils/sleep。d/myWakeupScript

    对于启动情况:

    >

  • /etc/init中放置一个脚本。d//code>:

    myStartupScript

    #!/bin/sh
    python path/to/your_script.py  
    

    使其可执行:chmod x/etc/init。d/myStartupScript

    可能的问题和修复:

    多亏了@meetamit,如果这不运行,您必须创建一个指向etc/rc的符号链接。d/

    ln -s /etc/init.d/start_my_app /etc/rc.d/
    

    对于Windows案例:

    提供的解决方案几乎不言而喻,您可以根据自己的目的选择其中之一

    我建议这样做(似乎最简单):

    >

  • Windows,对吗?打开任务计划程序并创建一个带有事件日志条目触发器的新任务Microsoft-Windows-Kernel-Power、Kernel-Power以及用于睡眠/唤醒的任何EventID。

    在事件上使用任务调度器和触发器。选择由事件触发,然后选择。设置基本日志:系统源:内核电源事件ID:42

  • 巴照
    2023-03-14

    任何长时间运行的Python脚本(包括您的)都将在计算机唤醒时运行,在计算机睡眠时暂停执行,然后在计算机再次唤醒时自动恢复执行。但是,脚本有几个问题可能会妨碍它正确运行,尤其是当计算机在time\u defined中指定的时间内Hibernate时。

    首先,日期时间。日期时间。now()和datetime。datetime()的精度为1微秒。取决于循环运行的速度,它可能不会计算time\u now=datetime。日期时间。now()在定义的时间(隐式为20:00:00.000000)中指定的精确微秒内执行。如果你的电脑恰好在那一微秒内处于睡眠状态,情况尤其如此。在这两种情况下,测试都不会实现,脚本也不会从循环中出现。您现在可以通过测试time\u来解决这两个问题

    其次,您的代码使用忙循环进行调度,这非常低效。这不会阻止它正确运行,但它会在运行时将处理器的一个核心固定为100%使用率。如果使用时间。sleep(),您可以将处理器使用量减少到几乎为零。原则上,您可以使用类似时间的东西。睡眠((time\u defined-time\u now)。totalseconds())以精确睡眠正确的秒数。然而,(至少在Mac电脑上)计时器只计算计算机处于唤醒状态的秒数,因此暂停计算机会打乱时间表。然而,您可以使用一系列的短睡眠(例如,1秒)来显著提高效率,并且仍然具有相当精确的计时。

    以下是修复这两个问题的一些代码

    import datetime, time
    
    def background_program():
        time_defined = datetime.datetime(2017, 4, 7, 20, 0, 0)
        ...
    
        while(True):
            time_now = datetime.datetime.now()
    
            if time_now >= time_defined:
                try:
                    # Run some code
                    pass
                except:
                    print('Failed to run')
                finally:
                    break
            else:
                # use a shorter delay if you want a more exact runtime
                time.sleep(1)
    

    这里有一些做同样事情的更精简的代码。我还添加了一个命令行参数,所以您可以像调用python myscript一样调用它。py—开始时间2017年4月17日20:00:00。(您还可以运行python myscript.py--help来获得一些帮助。)

    import datetime, time, argparse
    
    def background_program(time_defined):
    
        # wait until time_defined, sleeping in short steps
        # note: you could use a shorter delay for more precision
        print "waiting until {}".format(time_defined.strftime('%Y-%m-%d %H:%M:%S'))
        while(datetime.datetime.now() < time_defined):
            time.sleep(1)
    
        # perform scheduled action
        try:
            print('Running the scheduled task.')
        except:
            print('Failed to run')
    
    
    if __name__ == '__main__':
        parser = argparse.ArgumentParser(description='Run a background task.')
        parser.add_argument(
            '--start-time', nargs=2, default=None,
            help='Specify the time to run the task, in YYYY-MM-DD HH-MM-SS format.'
        )
        args = parser.parse_args()
        if args.start_time is not None:
            start_time = datetime.datetime.strptime(' '.join(args.start_time), '%Y-%m-%d %H:%M:%S')
            background_program(start_time)
    
     类似资料:
    • 问题内容: 我有一个简单的Python脚本,如果满足条件,我想停止执行。 例如: 本质上,我正在寻找一种与函数主体中的’return’关键字等效的行为,该关键字允许代码流退出该函数而不执行其余代码。 问题答案: 要退出脚本,您可以使用, 您还可以提供退出状态值,通常是整数。 以零退出,这通常被解释为成功。非零代码通常被视为错误。默认值为零退出。 打印“ aa!错误!” 并以状态代码1退出。 os模

    • 问题内容: 我写了Python脚本来处理大量的大文本文件,并且可能 要花费很多时间 。有时,需要停止正在运行的脚本并在以后恢复它。停止脚本的可能原因是程序崩溃,磁盘空间不足或需要执行此操作的其他原因。我想为脚本实现一种“停止/恢复”机制。 在 车站 :脚本退出和保存其当前状态。 在 简历 :剧本开始,但是从最新的保存状态持续 我将使用 pickle 和 信号 模块来实现它。 我将很高兴听到如何以p

    • 问题内容: 我能运行Linux命令状或从Java没有问题,但不能得到执行的Python脚本。 这是我的代码: 什么都没有发生。它到达了SEND,但之后就停止了… 我正在尝试执行需要root权限的脚本,因为它使用串行端口。另外,我还必须传递带有一些参数的字符串(数据包)。 问题答案: 您不能像在示例中那样在内部使用PIPE 。PIPE是shell的一部分。 你可以做 将命令放入shell脚本并使用或

    • 问题内容: 我尝试执行以下操作(我的jar和python文件都在同一目录中): 和 无论是工作过。因此,我当时以为应该改用Jython,但我认为必须有一种更简单的方法来通过python执行jar文件。 你知道我可能做错了什么吗?或者,是否还有其他网站可以进一步研究我的问题? 问题答案: 我将以这种方式使用子流程: 但是,如果你有一个正确配置的,你应该能够直接运行jar,因为你写的。 那么,这正是您

    • 问题内容: 我有一个简单的脚本blah.py(使用Python 2): 如果我通过以下方式执行脚本: 它输出参数,但是如果我通过以下方式执行脚本: 发生错误: 因此参数不会传递给脚本。 PATH中的python.exe。路径中也包含blah.py的文件夹。 python.exe是执行* .py文件的默认程序。 问题是什么? 问题答案: 执行脚本而不在前面键入“ python”时,你需要了解有关Wi

    • 问题内容: 我需要从Django Shell执行Python脚本。我试过了: 但这没有用。只是在等我写东西。 问题答案: 该<<部分有误,请<改用: 你也可以这样做: 对于python3,你需要使用