2014-06-10 3 views
3

인턴쉽의 일환으로 단위 테스트를하고 있습니다. 상사는 항상 사물을 자동화하는 방법을 찾는 것이 가장 좋은 방법이라고 말하면서 파이썬을 사용할 수 있는지, 특정 구조와 구문을 가진 텍스트 파일을 읽은 후 스크립트를 작성하는 것이 가능한지 궁금합니다. 그 텍스트 파일을 기반으로 C++ 파일?파이썬 스크립트를 사용하여 C++ 파일/프로그램을 생성하고 작성할 수 있습니까?

단위 테스트를 수행하는 데 Google-Test를 사용하고 있습니다. 회사 도구에 좋은 추가 도구가 될 것이라고 생각하지만 다른 사람이 비슷한 작업을 수행했는지 알고 싶습니다.

감사합니다.

+6

확인합니다. 파이썬은 다른 종류의 파일을 생성 할 수있는 것처럼 쉽게 C++ 파일을 생성 할 수 있습니다 .. open ("test.cpp", "w") with file : file.write ("int main() {printf ('Hello, 세계! '); return 0;} ")' – Kevin

답변

5

네, 확실히 할 수 있습니다. 전에 (구조체를 읽고 쓰는 데 C++ 코드를 작성하기 위해 Python을 내부적으로 사용했습니다)이 작업을 수행했습니다. 사용자 정의 스크립트 (@Kevin이 그의 코멘트에서 말하듯이 )를 사용하거나 더 구조화 된 접근 방식을 원하면 Cog과 같은 Python 도구를 사용할 수 있습니다.

무엇이든간에, 절충점이 있습니다. 파이썬을 사용하여 C++ 코드를 생성한다는 것은 개발자가 다른 언어를 배우고 (대단히 중요하지 않으며 파이썬이 배우고 C++을 보완 할 가치가 있음) 개발 및 빌드 프로세스에 추가 수준의 간접 지정이 있음을 의미합니다. 추가로 (파이썬) 유지할 코드. 이 길을가는 경우, 단순함은 미덕이라는 것을 기억하십시오. "모든 종류의 C++ 코드를 상상할 수있는"프레임 워크를 생성하는 춤을 추며 노래를 쓰려고 애 쓰지 마십시오.

2

조쉬 (Josh)의 답변은 규모를 확장하려는 경우 좋지만 간단한 예제가 어떻게 보이는지 알고 싶습니다. 대부분의 작업은 subprocess 모듈을 통해 수행됩니다. 여기에 리눅스 컴퓨터를 사용하고 있습니다. 제 컴파일러는 gcc이지만 특정 시스템 아키텍처에 어떻게 의존하는지 쉽게 알 수 있습니다.

import subprocess 

code = r''' 
#include <stdio.h> 
int main() { 
    for(int i=0;i<5;i++) { 
    printf("Testing %d\n",i); 
    } 
    return 0; 
} 
''' 

f_cpp = "test.cpp" 
with open(f_cpp,'w') as FOUT: 
    FOUT.write(code) 

# Compile the program 
f_exec = "./myprogram" 
compile_cmd = "gcc {} -o {}".format(f_cpp, f_exec) 
subprocess.call(compile_cmd, shell=True) 

# Run the program 
p = subprocess.Popen(f_exec, shell=True, 
        stdin=subprocess.PIPE, 
        stdout=subprocess.PIPE) 

# Step through the output 
for line in p.stdout: 
    print line 

이 출력으로 제공합니다

Testing 0 
Testing 1 
Testing 2 
Testing 3 
Testing 4 
+0

흥미 롭습니다. 나는 파이썬이 gcc 자체를 호출하는 것을 고려하지 않았다. 일반적으로 파이썬에서 단순히 C++ 코드를 생성하고 일반 빌드 시스템에서 빌드를 처리하도록하는 것이 더 쉽다고 생각합니다. –

+0

@JoshKelley 물론, 당신과 당신의 팀이 편안함에 달려 있다고 생각합니다. 내 경험상, 모든 것을 파이썬으로 유지하므로, stderr로 밀린 것을 쉽게 잡아서 그걸로 뭔가를 할 수 있습니다. 이것은 내가 유전자 알고리즘으로 자동 생성 된 코드를 작성하려고 할 때 귀하의 마일리지가 다를 수 있습니다! – Hooked

+0

@Hooked @Hooked 나는 대답을 좋아합니다. 감사합니다.하지만 Josh는 프로 시저를 만드는 회사를 사용해야한다는 점에서 옳았습니다. 그래서 다른 사람들이 파일을 생성하기를 원할 때 다른 충돌을 피할 수있는 최선책이 될 것입니다. – Puddinglord

관련 문제