0

我想知道如何让一个函数每分钟刷新一次,并检查它是否打开了某个文件。我不完全知道该怎么做,但这是我正在寻找的一个例子:

def timedcheck():
   if thisgame.exe is open:
      print("The Program is Open!")
   else:
      print("The Program is closed!")
      *waits 1 minute*
      timedcheck()

我还希望脚本每分钟刷新一次函数“def timedcheck():”,因此它会不断检查 thisgame.exe 是否打开。

我已经搜索了该站点,所有建议都建议使用“import win32ui”,但这样做时会出错。

4

3 回答 3

3

每分钟重复一次检查:

def timedcheck():
   while True:
       if is_open("thisgame.exe"):
          print("The Program is Open!")
       else:
          print("The Program is closed!")
       sleep(60)

由于它是一个 .exe 文件,我假设“检查此文件是否打开”是指“检查 thisgame.exe 是否正在运行”。psutil应该会有所帮助 - 我没有测试下面的代码,所以它可能需要一些调整,但显示了一般原则。

def is_open(proc_name):
    import psutil
    for process in psutil.process_iter():
        if proc_name in process.name:
            return True
    return False
于 2013-02-03T02:49:18.243 回答
0

这是@rkd91 答案的变体:

import time

thisgame_isrunning = make_is_running("thisgame.exe")

def check():
   if thisgame_isrunning():
      print("The Program is Open!")
   else:
      print("The Program is closed!")

while True:
    check() # ignore time it takes to run the check itself
    time.sleep(60) # may wake up sooner/later than in a minute

其中make_is_running()

import psutil # 3rd party module that needs to be installed

def make_is_running(program):
    p = [None] # cache running process
    def is_running():
        if p[0] is None or not p[0].is_running():
            # find program in the process list
            p[0] = next((p for p in psutil.process_iter()
                         if p.name == program), None)
        return p[0] is not None
    return is_running

psutil在 Windows 上安装 Python 2.7,您可以运行psutil-0.6.1.win32-py2.7.exe.

于 2013-02-03T16:38:05.047 回答
0

您可以使用时间模块中的睡眠,输入为 60,在检查之间延迟 1 分钟。您可以暂时打开文件并在不需要时将其关闭。如果文件已打开,则会发生 IOError。捕获带有异常的错误,程序将再等待一分钟,然后再重试。

import time
def timedcheck():
   try:
      f = open('thisgame.exe')
      f.close()
      print("The Program is Closed!")
   except IOError:
      print("The Program is Already Open!")
   time.sleep(60) #*program waits 1 minute*
   timedcheck()
于 2013-02-03T02:39:44.987 回答