2015-10-16 122 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