Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何防止脚本被挂起停止?_Python_Linux_Process - Fatal编程技术网

Python 如何防止脚本被挂起停止?

Python 如何防止脚本被挂起停止?,python,linux,process,Python,Linux,Process,我有一个python闹钟脚本,需要在某个时候叫醒我。当我上床睡觉并让它运行时,我使用的带有Linux Mint的笔记本电脑在一段时间不活动后会自动暂停。我如何防止脚本停止并保持它运行?我的笔记本电脑在我的房间里,我需要关上它的盖子,因为它的光线让人难以入睡。这是我的脚本 import time import sys import webbrowser alarm_HH = raw_input("Enter the hour you want to wake up at\n") alarm_MM

我有一个python闹钟脚本,需要在某个时候叫醒我。当我上床睡觉并让它运行时,我使用的带有Linux Mint的笔记本电脑在一段时间不活动后会自动暂停。我如何防止脚本停止并保持它运行?我的笔记本电脑在我的房间里,我需要关上它的盖子,因为它的光线让人难以入睡。这是我的脚本

import time
import sys
import webbrowser

alarm_HH = raw_input("Enter the hour you want to wake up at\n")
alarm_MM = raw_input("Enter the minute you want to wake up at\n")

print("You want to wake up at ", alarm_HH)
while True:
    now = time.localtime()
    if now.tm_hour == int(alarm_HH) and now.tm_min == int(alarm_MM):
        webbrowser.open_new_tab("http://www.repeatmyvids.com/watch?v=SXLplRtMNfg&kmdom=youtube")
        break

    else:
        timeout = 60 - now.tm_sec
        if raw_input("Want me to stop?"):
          break 
[编辑]

我安装了python xlib模块,这是一个低级python库,您可以使用
sudo aptitude install python xlib
安装它。我添加了几行代码,移动鼠标指针以防止挂起或睡眠,这样我的脚本仍然可以在盖关闭且无任何输入的情况下工作

    d = display.Display()
    s = d.screen()
    root = s.root
    root.warp_pointer(500,500)
    d.sync()
我添加了其中的一些,代码现在看起来像这样

import time
import sys
import webbrowser
from Xlib import X, display

alarm_HH = input("Enter the hour you want to wake up at\n")
alarm_MM = input("Enter the minute you want to wake up at\n")

print("You want to wake up at ", alarm_HH)
while True:
    now = time.localtime()
    if now.tm_hour == int(alarm_HH) and now.tm_min == int(alarm_MM):
        webbrowser.open_new_tab("http://www.repeatmyvids.com/watch?v=SXLplRtMNfg&kmdom=youtube")
        break

    else:
        d = display.Display()
        s = d.screen()
        root = s.root
        root.warp_pointer(500,500)
        d.sync()

        time.sleep( 5 )
        root.warp_pointer(250,250)
        d.sync()

        time.sleep( 5 )
        root.warp_pointer(100,100)
        d.sync()

        time.sleep( 5 )
        root.warp_pointer(250,250)
        d.sync()
感谢EngHamoud给了我移动指针以防止挂起的想法。

即使在(我认为是“挂起”)中,CPU也会停止执行指令。因此,您的程序不再运行--因此无法唤醒您的计算机


当然,您必须探索其他方法,例如配置实时时钟(在睡眠状态下仍通电)以唤醒计算机。在嵌入式系统上,您还可以访问可用于此目的的硬件看门狗。不知道这在PC上是否可用。

如果终止,将终止,因为脚本本身可以使用
atexit

如果由于操作系统“在用户未处于活动状态的一段时间后”而挂起,我之前就遇到过这个问题,然后我使用模块xlib控制鼠标随机移动到将处于活动状态的位置

否则,我认为你必须找出正确的操作系统配置


希望我已经回答了您的疑问

如果您想防止程序在长时间处于“空闲”状态后暂停,那么鼠标技巧在Windows中也会起作用。不过,它似乎并没有阻止操作系统睡眠和暂停:(以下是我使用鼠标移动概念的异步Windows解决方案:

创建其中一个
KeepActiveThread
对象,并在进程运行很长时间时根据需要调用
start()
/
stop()

import win32api # pywin32
import thread
import time

OSCILLATION_FREQ_SECS = 30

class KeepActiveThread() :

    def __init__( self ) :
        self.activeId_ = None        
        self.resurrectId_ = None        

    def start( self ) :       
        if self.activeId_ is None :
            if self.resurrectId_ is None :
                self.resurrectId_ = thread.start_new_thread( 
                    self.__oscillateMouseCursor, () )             
            self.activeId_ = self.resurrectId_

    def stop( self ) :       
        self.activeId_ = None

    def __oscillateMouseCursor( self ) :           
        move = 1
        while self.activeId_ :
            move *= -1
            try:
                (x, y) = win32api.GetCursorPos()        
                win32api.SetCursorPos( (x+move, y) )        
            except: pass
            time.sleep( OSCILLATION_FREQ_SECS )                 
        self.resurrectId_ = None                    

我建议使用ctypes:

导入ctypes
ES_连续=0x8000000
ES_系统_必需=0x00000001
ctypes.windell.kernel32.SetThreadExecutionState(
连续的\
ES_系统(需要)

这更适合superuser.com您可以尝试将计算机设置为lan唤醒,这样脚本可能会执行。