python内でgccのエラーメッセージのリスト化


gccのエラーメッセージを行ごとのリストに格納するにはどうすれば良いのでしょうか？  
gccコマンドの対象ファイルはコマンドライン引数から用いたいです。

[code]

    #coding:UTF-8
    
    import subprocess
    import sys
    args = sys.argv
    lines = []
    
    proc=subprocess.Popen(['gcc','Wall','Wextra',args[1]+'.c'].splitlines(),stderr=subprocess.PIPE)
    
    lines = proc.stderr
    print(lines)
    
[/code]

上記のコードを実行すると以下のようなエラーが発生してしまいます

[code]

    Traceback (most recent call last):
      File "test.py", line 8, in <module>
    proc=subprocess.Popen(['gcc','Wall','Wextra',args[1]+'.c'].splitlines(),stderr=subprocess.PIPE)
    AttributeError: 'list' object has no attribute 'splitlines' 
    
[/code]

例えば以下のようなエラーが発生した場合

[code]

    undec.c: In function 'main':
    undec.c:8:2: error: 'z' undeclared (first use in this function)
      z=30;
      ^
    undec.c:8:2: note: each undeclared identifier is reported only once for each function it appears in
    
    
[/code]

次のようにリストに格納したいです．。

[code]

    lines=["undec.c: In function 'main':\n","undec.c:8:2: error: 'z' undeclared (first use in this function)/n","z=30;\n","^\n","undec.c:8:2: note: each undeclared identifier is reported only once for each function it appears in\n"]
    
[/code]




  1. Popenではなくrunを使ってください。
  2. gccへの引数にハイフンが足りません。
  3. proc.stderrはバイナリ文字列になりますから適宜デコードが必要です。

[code]

    import subprocess
    import sys
    args = sys.argv
    lines = []
    
    proc=subprocess.run(['gcc','-Wall','-Wextra',args[1]+'.c'],stderr=subprocess.PIPE)
    
    lines = proc.stderr.decode('utf-8').splitlines(keepends=True)
    print(lines)
    
[/code]

