【问题标题】:Windows 7/Vista process management - how to start an external program after long idle time?Windows 7/Vista 进程管理 - 长时间空闲后如何启动外部程序?
【发布时间】:2023-03-08 04:20:01
【问题描述】:

这是that问题的后续。

基本上,我有一个 python 脚本,它应该在大约 2-6 小时后通过计时器启动另一个程序 (.exe)。只要我用短暂的倒计时测试它,或者只要在计时器到期之前计算机处于“活动状态”(=用户输入之前,屏幕打开),或者只要没有其他程序同时工作(一个在我的例子中是 Excel VBA 脚本)。

在 Windows 7 上,长时间倒计时和运行 Excel 时,外部程序无法打开。没有任何错误消息和任何其他(python 内部)命令按应执行的方式执行。

我使用 x=subprocess.Popen([program,args],flags) 命令并尝试了几乎所有可能的标志(Shell、buffersize、creationflags、stdout 等)和替代方案(调用),但它的行为始终如上文所述。

现在我在尝试通过 VBA 打开外部程序时注意到了类似的行为,所以我不认为这是特定于 Python 的问题,而是特定于 Windows 的问题。此外,我在另一台装有 Windows Vista 的 PC 上进行了尝试,结果令人惊讶(如果重要的话,都是 64 位)。

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

有人有想法吗?非常感谢,我慢慢地感到沮丧......

【问题讨论】:

  • 你在处理excel吗?您是否考虑过在您的 python 脚本中移动该功能?使用开放式办公室?或者,使用 COM 连接到 excel?
  • @Spencer no Excel vba 宏没有以任何方式与我的脚本连接(除了它必须同时运行,这工作正常)。我还尝试通过 VBA 在“excel-timer”之后打开外部程序并遇到了同样的问题...... Python/VBA“内部”命令在各自的计时器之后执行,但无法打开外部程序...
  • 您是否尝试过迁移到新机器?也许您系统上的某些东西很糟糕。
  • @Spencer 不要这么认为,到目前为止,我尝试了 3 台机器,2 台不同的笔记本电脑(Windows 7、32 位 + 64 位)和一台装有 Vista 的 PC - 在两台笔记本电脑上同样的问题,它只适用于带有 Vista 的 PC ......所以我确信它与 Windows 进程管理/节能/可能是一些新的 Windows 7 功能有关......
  • 这听起来很可能令人沮丧。但这听起来也与您尝试子处理的可执行文件有关。将该功能迁移到 python 脚本中有多难?除此之外,请查看winpdb。看看是否可以将调试器挂接到脚本中,然后在子进程调用之前设置一个断点。

标签: python windows winapi windows-7 process


【解决方案1】:

考虑到Here 中所述的问题后,我认为可行的替代方案是 使用许多短暂停而不是长暂停,因此程序始终处于活动状态,但可能会导致更高的内存使用量。

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)

只是猜测,不确定,没时间验证。

【讨论】:

  • 嗯,我尝试了不同的“睡眠”间隔,但仍然没有找到任何可行的解决方案。暂时我坚持使用 Vista 而不是 Win7...
  • 是的!我基本上尝试了所有东西和许多间隔。仅当倒计时超过约 1-2 小时且 PC 在此期间“未触及”时才会发生错误。除了“Popen”语句之外的任何代码都按预期执行。如果我在倒计时到期之前移动鼠标(或按任何键或其他任何东西),一切(包括 Popen)都可以工作。
  • 如果你调用 popen 只是为了中断计时器呢?就像每 30 分钟调用一次程序一样?
猜你喜欢
  • 2011-03-20
  • 1970-01-01
  • 2013-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多