pythonpython-2.7timeoutexecfile

Timeout on an execfile call function for windows? (Signal Alternative?)


Pretty much as the title says, I'm trying to run some execfile calls but I am looking for a timeout option so that if my called script takes over ten seconds to run then it will kill the called script and continue...

The signal library/package is only for UNIX, I'm on windows so I'm a little stuck.

# Sequential wait to finish before moving onto the next script
try: 
    execfile("SUBSCRIPTS/TESTSCRIPT.py", {})
except Exception:
    errors.write(traceback.format_exc() + '\n')
    errors.write("\n\n")

# Semi-Sequential (Don't wait for it to finish before moving onto the third script)
subprocess.Popen(["pythonw", "SUBSCRIPTS/TEST.py", "0"], shell=True)

# Sequential wait to finish before moving onto the next script
try: 
    execfile("SUBSCRIPTS/TEST.py", {})
except Exception:
    errors.write(traceback.format_exc() + '\n')
    errors.write("\n\n")

# Sequential wait to finish before moving onto the next script
try: 
    execfile("SUBSCRIPTS/TESTSCRIPT.py", {})
except Exception:
    errors.write(traceback.format_exc() + '\n')
    errors.write("\n\n")

Any ideas?


Solution

  • Something like this should work:

    # Sequential wait to finish before moving onto the next script
    try: 
        execfile("SUBSCRIPTS/TESTSCRIPT.py", {})
    except Exception:
        errors.write(traceback.format_exc() + '\n')
        errors.write("\n\n")
    
    # Semi-Sequential (Don't wait for it to finish before moving onto the third script)
    p1 = subprocess.Popen(["pythonw", "SUBSCRIPTS/TEST.py", "0"], shell=True)
    
    # Sequential wait to finish before moving onto the next script
    try: 
        execfile("SUBSCRIPTS/TEST.py", {})
    except Exception:
        errors.write(traceback.format_exc() + '\n')
        errors.write("\n\n")
    
    #Do you want to kill the "pythonw", "SUBSCRIPTS/TEST.py", "0" command after the "SUBSCRIPTS/TEST.py" call or do you want to allow the pythonw command to continue running until after the "SUBSCRIPTS/TESTSCRIPT.py"
    
    #you need to put this code depending on where the subprocess.Popen(["pythonw", "SUBSCRIPTS/TEST.py", "0"], shell=True) #script needs to be killed
    currentStatus = p1.poll()
    if currentStatus is None: #then it is still running
      try:
        p1.kill() #maybe try os.kill(p1.pid,2) if p1.kill does not work
      except:
        #do something else if process is done running - maybe do nothing?
        pass
    
    # Sequential wait to finish before moving onto the next script
    try: 
        execfile("SUBSCRIPTS/TESTSCRIPT.py", {})
    except Exception:
        errors.write(traceback.format_exc() + '\n')
        errors.write("\n\n")
    
    #or put the code snippet here if you want to allow the pythonw command to continue running until after the SUBSCRIPTS/TESTSCRIPT.py command
    

    s