【发布时间】:2012-01-16 15:56:21
【问题描述】:
我有一个奇怪的 Python(3.x) 问题:
基本上我只想创建一个计时器,它在预定义的时间调用外部程序(.exe) - (简化如下,另外还有一个倒计时输出):
time.sleep(y)
x=popen("pathto.exe")
如果我测试我的代码,一切都完全按照我想要的方式工作,但仅适用于小 y。对于大 y(等待超过几个小时),Python 不执行 popen 命令(但也没有任何错误)。 popen 命令之后的任何其他“正常”代码(例如我的电子邮件通知)都可以正常工作。
我不完全确定这是 Windows(我在 64 位 Windows 7 上工作,禁用了我知道的所有节能功能)还是 Python 问题,但到目前为止找不到解决方案:
我为 popen 尝试了几个额外的参数(Shell/no Shell 等),并尝试在等待期之前打开程序/定义 X,然后再次关闭它,但不幸的是没有解决这个问题。
非常感谢!
编辑:更详细的代码示例:
while 1:
if time.mktime(trade2)<=time.time():
break
else:
dif=time.mktime(trade2)-time.time() # this is just for a visible countdown
aus=time.gmtime(dif)
sys.stdout.flush()
print("\b\b\b\b\b\b\b\b\b", end="\r")
print(aus[3],aus[4],aus[5], sep=":",end="")
time.sleep(0.5)
x=subprocess.Popen("c:/xyz/abc.exe")
print("Sending Mail...")
print() 总是按预期执行,Popen 仅在倒计时少于大约 1-2 小时时执行。
【问题讨论】:
-
我假设你的意思是
time.sleep()? -
如果将 popen 调用替换为 print 会发生什么?
-
使用打印(和任何其他“内部”命令),一切都按预期工作......正如我所说,在 popen 命令之后,我有一些代码可以发送确认邮件 - 甚至可以完美运行如果“睡眠时间”很长。 popen 命令似乎被跳过了...
-
可能有一些代码告诉程序“保持活动状态”(防止任何 Windows Idle 措施?)并为调用外部程序保留内存可能是一个解决方案? (但通常总有足够的可用内存,没有内存泄漏..)
标签: python windows-7 subprocess exe popen