#!/bin/python
import subprocess
import traceback
import logging
output_file = "/Users/abhabhin/Desktop/Cisco/Cisco_Tasks/1_KnowledgeTraining/CodeImplementations/report.log"
cmd = "/Users/abhabhin/Desktop/Cisco/Cisco_Tasks/1_KnowledgeTraining/CodeImplementations/script.sh HelloWorld"
try:
with open(output_file, "w") as file:
output = (subprocess.check_output(cmd, shell=True))
file.write(output.decode())
except Exception as e:
#logging.error(traceback.format_exc())
#print("traceback.format_exc() = " + (str)(traceback.format_exc()))
print("Inside Exception")
with open(output_file, "w") as file:
file.write((str)(traceback.format_exc()))
上面是我的代码,其中-
"output_file "是存储通过check_output运行的命令输出的日志文件。"cmd "是要运行的cmd,其中通过传递HelloWorld文件运行script.sh。
现在,当通过subprocess.check_output()函数运行命令(cmd)没有错误时,output_file有cmd输出的内容。
但是当通过subprocess.check_output()运行cmd时,在build.sh中出现了语法错误,在console上抛出了一个错误,但是这个错误并没有被记录到output_file中。
请给我一个建议,让我也能把控制台的错误写到输出文件中。
我不能使用subprocess.run(),所以请建议只使用subprocess.check_output()。
参考上面的代码,供参考。
谢谢,Abhinav
默认情况下,你只捕获标准输出。错误将在标准错误上。
从 文件:
To also capture standard error in the result, use stderr=subprocess.STDOUT:
>>>
>>> subprocess.check_output(
... "ls non_existent_file; exit 0",
... stderr=subprocess.STDOUT,
... shell=True)
'ls: non_existent_file: No such file or directory\n'