Windows 7/Vista 进程管理 - 如何在长时间闲置后启动外部程序?

2 投票
1 回答
855 浏览
提问于 2025-04-17 12:14

这是对那个问题的后续讨论。

简单来说,我有一个Python脚本,它应该在2到6小时后通过定时器启动另一个程序(.exe)。只要我用短的倒计时测试,或者在定时器到期之前电脑是“活跃”的(也就是有用户输入,屏幕是亮的),或者没有其他程序同时在运行(比如我这里的Excel VBA脚本),一切都正常。

但是在Windows 7上,如果倒计时很长,而且Excel正在运行,外部程序就是打不开。没有任何错误信息,而且在那之后的其他Python命令也都能正常执行。

我使用的是x=subprocess.Popen([program,args],flags)这个命令,尝试了几乎所有可能的标志(比如Shell、buffersize、creationflags、stdout等)和替代方法(call),但它的表现总是像上面描述的那样。

我还注意到,当我尝试通过VBA打开外部程序时也出现了类似的情况,所以我觉得这不是Python特有的问题,而是Windows特有的问题。此外,我在另一台Windows Vista的电脑上试过,结果居然能正常工作(两台都是64位的,如果这有影响的话)。

我已经尝试过提高进程优先级,或者通过SetThreadExecutionState来防止电脑进入空闲状态,并且关闭了我知道的所有节能功能,但到目前为止没有任何改变。

有没有人有主意?非常感谢,我开始感到有点沮丧了……

1 个回答

0

根据在这里提到的问题,我觉得一个可行的替代方案是使用很多短暂的暂停,而不是一个长时间的暂停。这样程序就会一直保持活跃,但可能会导致内存使用量增加。

def wait(sec,sleeptime = 0):
    import time
    endsecs = time.time() + sec
    while True:
        if endsecs <= time.time():
            return None
        if sleeptime != 0:
            time.sleep(sleeptime)

这只是个猜测,没什么确定的,没时间去验证。

撰写回答