如何获取subprocess.check_output()函数返回的错误?

问题描述 投票:1回答:1
#!/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

python error-handling compiler-errors subprocess error-logging
1个回答
0
投票

默认情况下,你只捕获标准输出。错误将在标准错误上。

文件:

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'
© www.soinside.com 2019 - 2024. All rights reserved.