import subprocess
import signal
import traceback
def get_info_from_syscmd(in_cmd_line, timeout=120):
if len(in_cmd_line) <= 0:
#_logger.error("invalid cmd line")
return -1, None
try:
#_logger.info("start cmd {}".format(in_cmd_line))
p = subprocess.Popen(in_cmd_line, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
try:
outs, errs = p.communicate(timeout=timeout) # outs为cmd命令行执行后显示到shell界面的结果
retval = p.returncode # 返回不为0时说明命令执行失败
except subprocess.TimeoutExpired:
os.kill(p.pid, signal.SIGKILL)
#_logger.warning('cmd {} process killed,timer {} begin'.format(in_cmd_line, timeout))
outs, errs = p.communicate()
retval = p.returncode
#_logger.warning('cmd {} process killed,timer {} end {}'.format(in_cmd_line, timeout, retval))
#_logger.info("run cmd {} ret {} | {} | {}".format(in_cmd_line, retval, outs, errs))
return retval, outs.decode("utf-8", "replace"), errs.decode()
except Exception as e:
#_logger.error("run cmd {} error {} - {}".format(in_cmd_line, e, traceback.format_exc()))
return -1, None, None
python中subprocess封装的执行命令行的函数
最新推荐文章于 2024-08-16 11:02:06 发布