上传所有文件
This commit is contained in:
45
utils/subproc.py
Normal file
45
utils/subproc.py
Normal file
@@ -0,0 +1,45 @@
|
||||
"""
|
||||
Description : This file is related to auto subprocess running
|
||||
Author : Ruidi Qiu (r.qiu@tum.de)
|
||||
Time : 2023/12/11 14:06:27
|
||||
LastEdited : 2024/4/28 13:26:18
|
||||
"""
|
||||
|
||||
import subprocess as sp
|
||||
|
||||
def subproc_call(cmd, timeout=120):
|
||||
"""
|
||||
run a cmd in shell and return the output and error
|
||||
#### input:
|
||||
- cmd: str
|
||||
- timeout: int, seconds
|
||||
#### output:
|
||||
- {"out": out_reg, "err": err_reg, "haserror": error_exist}
|
||||
- out_reg: str, output of cmd
|
||||
- err_reg: str, error of cmd
|
||||
- error_exist: int, 0 if no error, 1 if error
|
||||
|
||||
cmd can at most run 2 minutes and if it exceeds, will return {"out": "timeout", "err": "program is timeout", "haserror": 1}
|
||||
"""
|
||||
# p = sp.Popen(cmd, shell=True, stdout=sp.PIPE, stderr=sp.PIPE)
|
||||
# out, err = p.communicate()
|
||||
# error_exist = p.returncode
|
||||
# out_reg = out.decode("utf-8")
|
||||
# err_reg = err.decode("utf-8")
|
||||
timeouterror = "program is timeout (time > %ds). please check your code. Hints: there might be some infinite loop, please check all the loops in your programm. If it is a verilog code, please check if there is a $finish in the code."%(timeout)
|
||||
p = sp.Popen(cmd, shell=True, stdout=sp.PIPE, stderr=sp.PIPE)
|
||||
out_reg = ""
|
||||
err_reg = ""
|
||||
error_exist = 0
|
||||
try:
|
||||
out, err = p.communicate(timeout=timeout)
|
||||
out_reg = out.decode("utf-8")
|
||||
err_reg = err.decode("utf-8")
|
||||
error_exist = p.returncode
|
||||
except sp.TimeoutExpired:
|
||||
p.kill()
|
||||
out_reg = ""
|
||||
err_reg = timeouterror
|
||||
error_exist = 1
|
||||
return {"out": out_reg, "err": err_reg, "haserror": error_exist}
|
||||
|
||||
Reference in New Issue
Block a user