Windows 7/Vista 进程管理 - 如何在长时间闲置后启动外部程序?
这是对那个问题的后续讨论。
简单来说,我有一个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)
这只是个猜测,没什么确定的,没时间去验证。