PythonからC言語を実行して、標準出力(実行結果)をPython側で使う。

PythonからC言語を実行して、標準出力(実行結果)をPython側で使います。
以下、ソース。

main.py

# -*- encoding: utf8 -*-
import subprocess
import os


def main():
  c_file = 'hogehoge.c'
  df = lambda s: '%d,' % s
  values = range(0, 20, 2)
  array_str = '{ %s }' % (' '.join(map(df, values)))[:-1]
  test_c_format = """
#include<stdio.h>

int main() {
  int n = %d;
  int s_size[] = %s;
  int i;

  for (i = 0; i < n; i++) {
    printf("%%d\\n", s_size[i]);
  }
}
"""
  with open(c_file, 'w') as f:
    f.write(test_c_format % (len(values), array_str))

  os.system("gcc %s" % c_file)
  result = subprocess.Popen('./a.out', stdout=subprocess.PIPE).communicate()[0]

  for i, v in enumerate(result[:-1].split('\n')):
    print i, v

if __name__ == '__main__':
  main()

生成ファイル(hogehoge.c)

#include<stdio.h>

int main() {
  int n = 10;
  int s_size[] = { 0, 2, 4, 6, 8, 10, 12, 14, 16, 18 };
  int i;

  for (i = 0; i < n; i++) {
    printf("%d\n", s_size[i]);
  }
}

実行結果

$python main.py
0 0
1 2
2 4
3 6
4 8
5 10
6 12
7 14
8 16
9 18