2015-10-16 71 views
0

下面是我写的python脚本中的一小段代码段。该脚本的目的是编译各种C文件。 (I修改了段,并简化以适合的问题的目的。)使用Python检查gcc警告

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

这种运作良好。但是我想跟踪哪些文件在没有警告的情况下被编译,哪些文件显示警告。

检查文件编译是否成功不成问题。我可以检查os.system()的返回值,也可以检查是否创建了相应的目标文件。

但是如何在编译期间检查somefile.c是否有任何警告?谢谢!

我曾尝试:

我使用“>”操作符(重定向)尝试,但不工作。我使用类似于:

os.system(my_cmd + " > output") 

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

回答

1

过程一般会得到两个输出流。其中一个是stdout,文件编号为1,标准输出为(不出所料)。另一种是错误和警告,通常称为stderr,文件号为2。重定向stderr在shell你会做:

gcc file.c -o file 2> some_file 

这会给你一个名为“SOME_FILE”包含任何GCC写给标准错误(包括你想要的信息)的文件。与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