1

这里的Python代码运行任意命令返回它的标准输出的数据,或者提高对非零退出代码的异常:查找执行时间subprocess.Popen蟒蛇

proc = subprocess.Popen(
cmd, 
stderr=subprocess.STDOUT, # Merge stdout and stderr 
stdout=subprocess.PIPE, 
shell=True) 

的子模块不支持执行如果它超过特定的阈值=>超时(能够杀死运行时间超过X秒的进程)

什么是最简单的方式来实现在Linux2.6上运行的get_execution_time和timeout ?

回答

0

好问题。这里是完整的代码:

import time, subprocess         # Importing modules. 

timeoutInSeconds = 1          # Our timeout value. 

cmd = "sleep 5"          # Your desired command. 
proc = subprocess.Popen(cmd,shell=True)     # Starting main process. 

timeStarted = time.time()         # Save start time. 

cmdTimer  = "sleep "+str(timeoutInSeconds)   # Waiting for timeout... 
cmdKill  = "kill "+str(proc.pid)+" 2>/dev/null"  # And killing process. 
cmdTimeout = cmdTimer+" && "+cmdKill     # Combine commands above. 
procTimeout = subprocess.Popen(cmdTimeout,shell=True) # Start timeout process. 

proc.communicate()          # Process is finished. 

timeDelta = time.time() - timeStarted      # Get execution time. 
print("Finished process in "+str(timeDelta)+" seconds.") # Output result.