使用 Python 检查 gcc 警告

Checking gcc warnings using Python

下面是我编写的 python 脚本中的一小段代码。该脚本的目的是编译各种 C 文件。 (我修改了片段并简化了它以符合问题的目的。)

    fileName = "somefile.c"
    my_cmd = "gcc -std=c99 -Wall " + fileName[-2:0] + " .o " + fileName
    os.system(my_cmd)

这很好用。但我想跟踪哪些文件在没有警告的情况下编译,哪些文件显示警告。

检查文件是否编译成功没有问题。我可以检查 return 的 os.system() 值,或者我可以检查是否创建了相应的目标文件。

但是我如何检查 somefile.c 在编译过程中是否有任何警告?谢谢!

我试过的:

我尝试使用“>”运算符(重定向),但它不起作用。我使用了类似的东西:

os.system(my_cmd + " > output")

无论 somefile.c 的内容是什么,名为 output 的文件总是被创建并且是空的!!

进程通常有两个输出流。一个是 stdout,文件编号为 1,并且(不出所料)用于标准输出。另一个用于错误和警告,通常称为 stderr,文件编号为 2。要在 shell 中重定向 stderr,您可以这样做:

gcc file.c -o file 2> some_file

这将为您提供一个名为 "some_file" 的文件,其中包含 gcc 写入 stderr 的所有内容(包括您想要的信息)。将其用作带 os.system 的字符串会起作用,但 高度 不推荐。您应该(几乎可以肯定)改用 subprocess 模块。这是一个例子:

import subprocess as s

p = s.Popen(["gcc", "-std=c99", "-Wall", "test.c", "-o", "test"], stdout=s.PIPE, stderr=s.PIPE)

p_stdout, p_stderr = p.communicate()

print "*****STDOUT*****"
print p_stdout
print "*****STDERR*****"
print p_stderr